Changes in uspace/lib/fs/libfs.c [3dd148d:feeac0d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/fs/libfs.c
r3dd148d rfeeac0d 45 45 #include <mem.h> 46 46 #include <sys/stat.h> 47 #include <sys/statfs.h>48 47 #include <stdlib.h> 49 48 … … 75 74 static void libfs_open_node(libfs_ops_t *, fs_handle_t, ipc_callid_t, 76 75 ipc_call_t *); 77 static void libfs_statfs(libfs_ops_t *, fs_handle_t, ipc_callid_t, ipc_call_t *);78 76 79 77 static void vfs_out_mounted(ipc_callid_t rid, ipc_call_t *req) … … 221 219 } 222 220 223 static void vfs_out_statfs(ipc_callid_t rid, ipc_call_t *req)224 {225 libfs_statfs(libfs_ops, reg.fs_handle, rid, req);226 }227 221 static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg) 228 222 { … … 282 276 case VFS_OUT_SYNC: 283 277 vfs_out_sync(callid, &call); 284 break;285 case VFS_OUT_STATFS:286 vfs_out_statfs(callid, &call);287 278 break; 288 279 default: … … 834 825 835 826 ops->node_put(fn); 836 837 827 838 828 async_data_read_finalize(callid, &stat, sizeof(struct stat)); 839 829 async_answer_0(rid, EOK); 840 830 } 841 842 void libfs_statfs(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_callid_t rid,843 ipc_call_t *request)844 {845 service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);846 fs_index_t index = (fs_index_t) IPC_GET_ARG2(*request);847 848 fs_node_t *fn;849 int rc = ops->node_get(&fn, service_id, index);850 on_error(rc, answer_and_return(rid, rc));851 852 ipc_callid_t callid;853 size_t size;854 if ((!async_data_read_receive(&callid, &size)) ||855 (size != sizeof(struct statfs))) {856 ops->node_put(fn);857 async_answer_0(callid, EINVAL);858 async_answer_0(rid, EINVAL);859 return;860 }861 862 struct statfs statfs;863 memset(&statfs, 0, sizeof(struct statfs));864 865 if (NULL != ops->size_block) {866 rc = ops->size_block(service_id, &statfs.f_bsize);867 if (rc != EOK) goto error;868 }869 870 if (NULL != ops->total_block_count) {871 rc = ops->total_block_count(service_id, &statfs.f_blocks);872 if (rc != EOK) goto error;873 }874 875 if (NULL != ops->free_block_count) {876 rc = ops->free_block_count(service_id, &statfs.f_bfree);877 if (rc != EOK) goto error;878 }879 880 ops->node_put(fn);881 async_data_read_finalize(callid, &statfs, sizeof(struct statfs));882 async_answer_0(rid, EOK);883 return;884 885 error:886 ops->node_put(fn);887 async_answer_0(callid, EINVAL);888 async_answer_0(rid, EINVAL);889 }890 891 831 892 832 /** Open VFS triplet. … … 942 882 943 883 fibril_mutex_lock(&instances_mutex); 944 list_foreach(instances_list, link) { 945 fs_instance_t *cur = list_get_instance(link, fs_instance_t, 946 link); 947 884 list_foreach(instances_list, link, fs_instance_t, cur) { 948 885 if (cur->service_id == service_id) { 949 886 fibril_mutex_unlock(&instances_mutex); … … 968 905 { 969 906 fibril_mutex_lock(&instances_mutex); 970 list_foreach(instances_list, link) { 971 fs_instance_t *inst = list_get_instance(link, fs_instance_t, 972 link); 973 907 list_foreach(instances_list, link, fs_instance_t, inst) { 974 908 if (inst->service_id == service_id) { 975 909 *idp = inst->data; … … 985 919 { 986 920 fibril_mutex_lock(&instances_mutex); 987 list_foreach(instances_list, link) { 988 fs_instance_t *inst = list_get_instance(link, fs_instance_t, 989 link); 990 921 list_foreach(instances_list, link, fs_instance_t, inst) { 991 922 if (inst->service_id == service_id) { 992 923 list_remove(&inst->link);
Note:
See TracChangeset
for help on using the changeset viewer.