Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_register.c

    rffa2c8ef rdf908b3  
    3636 */
    3737
     38#include <ipc/ipc.h>
    3839#include <ipc/services.h>
    3940#include <async.h>
     41#include <async_rel.h>
    4042#include <fibril.h>
    4143#include <fibril_synch.h>
     
    109111void vfs_register(ipc_callid_t rid, ipc_call_t *request)
    110112{
    111         int phone;
    112        
    113113        dprintf("Processing VFS_REGISTER request received from %p.\n",
    114114            request->in_phone_hash);
     
    121121                dprintf("Failed to deliver the VFS info into our AS, rc=%d.\n",
    122122                    rc);
    123                 async_answer_0(rid, rc);
     123                ipc_answer_0(rid, rc);
    124124                return;
    125125        }
     
    131131        if (!fs_info) {
    132132                dprintf("Could not allocate memory for FS info.\n");
    133                 async_answer_0(rid, ENOMEM);
     133                ipc_answer_0(rid, ENOMEM);
    134134                return;
    135135        }
    136136       
    137137        link_initialize(&fs_info->fs_link);
     138        fibril_mutex_initialize(&fs_info->phone_lock);
    138139        fs_info->vfs_info = *vfs_info;
    139140        free(vfs_info);
     
    143144        if (!vfs_info_sane(&fs_info->vfs_info)) {
    144145                free(fs_info);
    145                 async_answer_0(rid, EINVAL);
     146                ipc_answer_0(rid, EINVAL);
    146147                return;
    147148        }
     
    159160                fibril_mutex_unlock(&fs_head_lock);
    160161                free(fs_info);
    161                 async_answer_0(rid, EEXISTS);
     162                ipc_answer_0(rid, EEXISTS);
    162163                return;
    163164        }
     
    176177        ipc_call_t call;
    177178        ipc_callid_t callid = async_get_call(&call);
    178         if (IPC_GET_IMETHOD(call) != IPC_M_CONNECT_TO_ME) {
    179                 dprintf("Unexpected call, method = %d\n", IPC_GET_IMETHOD(call));
     179        if (IPC_GET_METHOD(call) != IPC_M_CONNECT_TO_ME) {
     180                dprintf("Unexpected call, method = %d\n", IPC_GET_METHOD(call));
    180181                list_remove(&fs_info->fs_link);
    181182                fibril_mutex_unlock(&fs_head_lock);
    182183                free(fs_info);
    183                 async_answer_0(callid, EINVAL);
    184                 async_answer_0(rid, EINVAL);
    185                 return;
    186         }
    187        
    188         phone = IPC_GET_ARG5(call);
    189         async_session_create(&fs_info->session, phone, 0);
    190         async_answer_0(callid, EOK);
     184                ipc_answer_0(callid, EINVAL);
     185                ipc_answer_0(rid, EINVAL);
     186                return;
     187        }
     188        fs_info->phone = IPC_GET_ARG5(call);
     189        ipc_answer_0(callid, EOK);
    191190       
    192191        dprintf("Callback connection to FS created.\n");
     
    198197        size_t size;
    199198        if (!async_share_in_receive(&callid, &size)) {
    200                 dprintf("Unexpected call, method = %d\n", IPC_GET_IMETHOD(call));
     199                dprintf("Unexpected call, method = %d\n", IPC_GET_METHOD(call));
    201200                list_remove(&fs_info->fs_link);
    202201                fibril_mutex_unlock(&fs_head_lock);
    203                 async_session_destroy(&fs_info->session);
    204                 async_hangup(phone);
    205                 free(fs_info);
    206                 async_answer_0(callid, EINVAL);
    207                 async_answer_0(rid, EINVAL);
     202                ipc_hangup(fs_info->phone);
     203                free(fs_info);
     204                ipc_answer_0(callid, EINVAL);
     205                ipc_answer_0(rid, EINVAL);
    208206                return;
    209207        }
     
    216214                list_remove(&fs_info->fs_link);
    217215                fibril_mutex_unlock(&fs_head_lock);
    218                 async_session_destroy(&fs_info->session);
    219                 async_hangup(phone);
    220                 free(fs_info);
    221                 async_answer_0(callid, EINVAL);
    222                 async_answer_0(rid, EINVAL);
     216                ipc_hangup(fs_info->phone);
     217                free(fs_info);
     218                ipc_answer_0(callid, EINVAL);
     219                ipc_answer_0(rid, EINVAL);
    223220                return;
    224221        }
     
    238235         */
    239236        fs_info->fs_handle = (fs_handle_t) atomic_postinc(&fs_handle_next);
    240         async_answer_1(rid, EOK, (sysarg_t) fs_info->fs_handle);
     237        ipc_answer_1(rid, EOK, (ipcarg_t) fs_info->fs_handle);
    241238       
    242239        fibril_condvar_broadcast(&fs_head_cv);
     
    272269                if (fs->fs_handle == handle) {
    273270                        fibril_mutex_unlock(&fs_head_lock);
    274                         phone = async_exchange_begin(&fs->session);
     271                        fibril_mutex_lock(&fs->phone_lock);
     272                        phone = async_relation_create(fs->phone);
     273                        fibril_mutex_unlock(&fs->phone_lock);
    275274
    276275                        assert(phone > 0);
     
    296295                if (fs->fs_handle == handle) {
    297296                        fibril_mutex_unlock(&fs_head_lock);
    298                         async_exchange_end(&fs->session, phone);
     297                        fibril_mutex_lock(&fs->phone_lock);
     298                        async_relation_destroy(fs->phone, phone);
     299                        fibril_mutex_unlock(&fs->phone_lock);
    299300                        return;
    300301                }
     
    332333}
    333334
    334 /** Find the VFS info structure.
    335  *
    336  * @param handle        FS handle for which the VFS info structure is sought.
    337  * @return              VFS info structure on success or NULL otherwise.
    338  */
    339 vfs_info_t *fs_handle_to_info(fs_handle_t handle)
    340 {
    341         vfs_info_t *info = NULL;
    342         link_t *cur;
    343 
    344         fibril_mutex_lock(&fs_head_lock);
    345         for (cur = fs_head.next; cur != &fs_head; cur = cur->next) {
    346                 fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
    347                 if (fs->fs_handle == handle) {
    348                         info = &fs->vfs_info;
    349                         break;
    350                 }
    351         }
    352         fibril_mutex_unlock(&fs_head_lock);
    353 
    354         return info;
    355 }
    356 
    357335/**
    358336 * @}
Note: See TracChangeset for help on using the changeset viewer.