Ignore:
File:
1 edited

Legend:

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

    rfeeac0d r6f2c1ff  
    266266}
    267267
    268 void vfs_mount(ipc_callid_t rid, ipc_call_t *request)
     268void vfs_mount_srv(ipc_callid_t rid, ipc_call_t *request)
    269269{
    270270        service_id_t service_id;
     
    405405}
    406406
    407 void vfs_unmount(ipc_callid_t rid, ipc_call_t *request)
     407void vfs_unmount_srv(ipc_callid_t rid, ipc_call_t *request)
    408408{
    409409        int rc;
     
    637637        else
    638638                fibril_rwlock_read_unlock(&namespace_rwlock);
     639
     640        if (!node) {
     641                async_answer_0(rid, ENOMEM);
     642                return;
     643        }
    639644       
    640645        /* Truncate the file if requested and if necessary. */
     
    14121417}
    14131418
     1419void vfs_statfs(ipc_callid_t rid, ipc_call_t *request)
     1420{
     1421        char *path;
     1422        int rc = async_data_write_accept((void **) &path, true, 0, 0, 0, NULL);
     1423        if (rc != EOK) {
     1424                async_answer_0(rid, rc);
     1425                return;
     1426        }
     1427       
     1428        ipc_callid_t callid;
     1429        if (!async_data_read_receive(&callid, NULL)) {
     1430                free(path);
     1431                async_answer_0(callid, EINVAL);
     1432                async_answer_0(rid, EINVAL);
     1433                return;
     1434        }
     1435
     1436        vfs_lookup_res_t lr;
     1437        fibril_rwlock_read_lock(&namespace_rwlock);
     1438        rc = vfs_lookup_internal(path, L_NONE, &lr, NULL);
     1439        free(path);
     1440        if (rc != EOK) {
     1441                fibril_rwlock_read_unlock(&namespace_rwlock);
     1442                async_answer_0(callid, rc);
     1443                async_answer_0(rid, rc);
     1444                return;
     1445        }
     1446        vfs_node_t *node = vfs_node_get(&lr);
     1447        if (!node) {
     1448                fibril_rwlock_read_unlock(&namespace_rwlock);
     1449                async_answer_0(callid, ENOMEM);
     1450                async_answer_0(rid, ENOMEM);
     1451                return;
     1452        }
     1453
     1454        fibril_rwlock_read_unlock(&namespace_rwlock);
     1455
     1456        async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
     1457       
     1458        aid_t msg;
     1459        msg = async_send_3(exch, VFS_OUT_STATFS, node->service_id,
     1460            node->index, false, NULL);
     1461        async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);
     1462       
     1463        vfs_exchange_release(exch);
     1464       
     1465        sysarg_t rv;
     1466        async_wait_for(msg, &rv);
     1467
     1468        async_answer_0(rid, rv);
     1469
     1470        vfs_node_put(node);
     1471}
     1472
    14141473/**
    14151474 * @}
Note: See TracChangeset for help on using the changeset viewer.