Changes in uspace/srv/vfs/vfs.c [ffa2c8ef:41e9ef7] in mainline


Ignore:
File:
1 edited

Legend:

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

    rffa2c8ef r41e9ef7  
    3636 */
    3737
     38#include <vfs/vfs.h>
    3839#include <ipc/services.h>
    39 #include <ipc/ns.h>
     40#include <abi/ipc/event.h>
     41#include <event.h>
     42#include <ns.h>
    4043#include <async.h>
    4144#include <errno.h>
     
    4548#include <as.h>
    4649#include <atomic.h>
     50#include <macros.h>
    4751#include "vfs.h"
    4852
    4953#define NAME  "vfs"
    5054
    51 static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall)
     55enum {
     56        VFS_TASK_STATE_CHANGE
     57};
     58
     59static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    5260{
    53         bool keep_on_going = true;
    54 
     61        bool cont = true;
     62       
    5563        /*
    5664         * The connection was opened via the IPC_CONNECT_ME_TO call.
     
    5967        async_answer_0(iid, EOK);
    6068       
    61         while (keep_on_going) {
     69        while (cont) {
    6270                ipc_call_t call;
    6371                ipc_callid_t callid = async_get_call(&call);
    6472               
     73                if (!IPC_GET_IMETHOD(call))
     74                        break;
     75               
    6576                switch (IPC_GET_IMETHOD(call)) {
    66                 case IPC_M_PHONE_HUNGUP:
    67                         keep_on_going = false;
    68                         break;
    6977                case VFS_IN_REGISTER:
    7078                        vfs_register(callid, &call);
    71                         keep_on_going = false;
     79                        cont = false;
    7280                        break;
    7381                case VFS_IN_MOUNT:
     
    8088                        vfs_open(callid, &call);
    8189                        break;
    82                 case VFS_IN_OPEN_NODE:
    83                         vfs_open_node(callid, &call);
    84                         break;
    8590                case VFS_IN_CLOSE:
    8691                        vfs_close(callid, &call);
     
    118123                case VFS_IN_DUP:
    119124                        vfs_dup(callid, &call);
     125                        break;
     126                case VFS_IN_WAIT_HANDLE:
     127                        vfs_wait_handle(callid, &call);
     128                        break;
     129                case VFS_IN_MTAB_GET:
     130                        vfs_get_mtab(callid, &call);
     131                        break;
    120132                default:
    121133                        async_answer_0(callid, ENOTSUP);
     
    123135                }
    124136        }
    125 
     137       
    126138        /*
    127139         * Open files for this client will be cleaned up when its last
    128140         * connection fibril terminates.
    129141         */
     142}
     143
     144static void notification_received(ipc_callid_t callid, ipc_call_t *call)
     145{
     146        switch (IPC_GET_IMETHOD(*call)) {
     147        case VFS_TASK_STATE_CHANGE:
     148                if (IPC_GET_ARG1(*call) == VFS_PASS_HANDLE)
     149                        vfs_pass_handle(
     150                            (task_id_t) MERGE_LOUP32(IPC_GET_ARG4(*call),
     151                            IPC_GET_ARG5(*call)), call->in_task_id,
     152                            (int) IPC_GET_ARG2(*call));
     153                break;
     154        default:
     155                break;
     156        }
    130157}
    131158
     
    170197
    171198        /*
     199         * Set notification handler and subscribe to notifications.
     200         */
     201        async_set_interrupt_received(notification_received);
     202        event_task_subscribe(EVENT_TASK_STATE_CHANGE, VFS_TASK_STATE_CHANGE);
     203
     204        /*
    172205         * Register at the naming service.
    173206         */
Note: See TracChangeset for help on using the changeset viewer.