Changeset 15f3c3f in mainline for uspace/srv/vfs
- Timestamp:
- 2011-06-22T22:00:52Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 86ffa27f
- Parents:
- ef09a7a
- Location:
- uspace/srv/vfs
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs.h
ref09a7a r15f3c3f 38 38 #include <fibril_synch.h> 39 39 #include <sys/types.h> 40 #include < devmap.h>40 #include <loc.h> 41 41 #include <bool.h> 42 42 #include <ipc/vfs.h> … … 61 61 #define VFS_PAIR \ 62 62 fs_handle_t fs_handle; \ 63 devmap_handle_t devmap_handle;63 service_id_t service_id; 64 64 65 65 /** … … 67 67 * doesn't contain any state. For a stateful structure, see vfs_node_t. 68 68 * 69 * @note fs_handle, devmap_handleand index are meant to be returned in one69 * @note fs_handle, service_id and index are meant to be returned in one 70 70 * IPC reply. 71 71 */ … … 181 181 extern void vfs_node_put(vfs_node_t *); 182 182 extern void vfs_node_forget(vfs_node_t *); 183 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, devmap_handle_t);183 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, service_id_t); 184 184 185 185 -
uspace/srv/vfs/vfs_file.c
ref09a7a r15f3c3f 115 115 116 116 ipc_call_t answer; 117 aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node-> devmap_handle,117 aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node->service_id, 118 118 file->node->index, &answer); 119 119 -
uspace/srv/vfs/vfs_lookup.c
ref09a7a r15f3c3f 162 162 aid_t req = async_send_5(exch, VFS_OUT_LOOKUP, (sysarg_t) first, 163 163 (sysarg_t) (first + len - 1) % PLB_SIZE, 164 (sysarg_t) root-> devmap_handle, (sysarg_t) lflag, (sysarg_t) index,164 (sysarg_t) root->service_id, (sysarg_t) lflag, (sysarg_t) index, 165 165 &answer); 166 166 … … 185 185 186 186 result->triplet.fs_handle = (fs_handle_t) rc; 187 result->triplet. devmap_handle = (devmap_handle_t) IPC_GET_ARG1(answer);187 result->triplet.service_id = (service_id_t) IPC_GET_ARG1(answer); 188 188 result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer); 189 189 result->size = … … 212 212 ipc_call_t answer; 213 213 aid_t req = async_send_2(exch, VFS_OUT_OPEN_NODE, 214 (sysarg_t) result->triplet. devmap_handle,214 (sysarg_t) result->triplet.service_id, 215 215 (sysarg_t) result->triplet.index, &answer); 216 216 -
uspace/srv/vfs/vfs_node.c
ref09a7a r15f3c3f 116 116 unsigned long key[] = { 117 117 [KEY_FS_HANDLE] = node->fs_handle, 118 [KEY_DEV_HANDLE] = node-> devmap_handle,118 [KEY_DEV_HANDLE] = node->service_id, 119 119 [KEY_INDEX] = node->index 120 120 }; … … 138 138 async_exch_t *exch = vfs_exchange_grab(node->fs_handle); 139 139 sysarg_t rc = async_req_2_0(exch, VFS_OUT_DESTROY, 140 (sysarg_t) node-> devmap_handle, (sysarg_t)node->index);140 (sysarg_t) node->service_id, (sysarg_t)node->index); 141 141 142 142 assert(rc == EOK); … … 160 160 unsigned long key[] = { 161 161 [KEY_FS_HANDLE] = node->fs_handle, 162 [KEY_DEV_HANDLE] = node-> devmap_handle,162 [KEY_DEV_HANDLE] = node->service_id, 163 163 [KEY_INDEX] = node->index 164 164 }; … … 184 184 unsigned long key[] = { 185 185 [KEY_FS_HANDLE] = result->triplet.fs_handle, 186 [KEY_DEV_HANDLE] = result->triplet. devmap_handle,186 [KEY_DEV_HANDLE] = result->triplet.service_id, 187 187 [KEY_INDEX] = result->triplet.index 188 188 }; … … 200 200 memset(node, 0, sizeof(vfs_node_t)); 201 201 node->fs_handle = result->triplet.fs_handle; 202 node-> devmap_handle = result->triplet.devmap_handle;202 node->service_id = result->triplet.service_id; 203 203 node->index = result->triplet.index; 204 204 node->size = result->size; … … 252 252 vfs_node_t *node = hash_table_get_instance(item, vfs_node_t, nh_link); 253 253 return (node->fs_handle == (fs_handle_t) key[KEY_FS_HANDLE]) && 254 (node-> devmap_handle== key[KEY_DEV_HANDLE]) &&254 (node->service_id == key[KEY_DEV_HANDLE]) && 255 255 (node->index == key[KEY_INDEX]); 256 256 } … … 264 264 unsigned refcnt; 265 265 fs_handle_t fs_handle; 266 devmap_handle_t devmap_handle;266 service_id_t service_id; 267 267 }; 268 268 … … 273 273 274 274 if ((node->fs_handle == rd->fs_handle) && 275 (node-> devmap_handle == rd->devmap_handle))275 (node->service_id == rd->service_id)) 276 276 rd->refcnt += node->refcnt; 277 277 } 278 278 279 279 unsigned 280 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, devmap_handle_t devmap_handle)280 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, service_id_t service_id) 281 281 { 282 282 struct refcnt_data rd = { 283 283 .refcnt = 0, 284 284 .fs_handle = fs_handle, 285 . devmap_handle = devmap_handle285 .service_id = service_id 286 286 }; 287 287 -
uspace/srv/vfs/vfs_ops.c
ref09a7a r15f3c3f 54 54 55 55 /* Forward declarations of static functions. */ 56 static int vfs_truncate_internal(fs_handle_t, devmap_handle_t, fs_index_t,56 static int vfs_truncate_internal(fs_handle_t, service_id_t, fs_index_t, 57 57 aoff64_t); 58 58 … … 65 65 vfs_pair_t rootfs = { 66 66 .fs_handle = 0, 67 . devmap_handle= 067 .service_id = 0 68 68 }; 69 69 70 static void vfs_mount_internal(ipc_callid_t rid, devmap_handle_t devmap_handle,70 static void vfs_mount_internal(ipc_callid_t rid, service_id_t service_id, 71 71 fs_handle_t fs_handle, char *mp, char *opts) 72 72 { … … 125 125 exch = vfs_exchange_grab(fs_handle); 126 126 msg = async_send_1(exch, VFS_OUT_MOUNTED, 127 (sysarg_t) devmap_handle, &answer);127 (sysarg_t) service_id, &answer); 128 128 /* Send the mount options */ 129 129 rc = async_data_write_start(exch, (void *)opts, … … 150 150 151 151 mr_res.triplet.fs_handle = fs_handle; 152 mr_res.triplet. devmap_handle = devmap_handle;152 mr_res.triplet.service_id = service_id; 153 153 mr_res.triplet.index = rindex; 154 154 mr_res.size = rsize; … … 157 157 158 158 rootfs.fs_handle = fs_handle; 159 rootfs. devmap_handle = devmap_handle;159 rootfs.service_id = service_id; 160 160 161 161 /* Add reference to the mounted root. */ … … 178 178 179 179 /* 180 * At this point, we have all necessary pieces: file system and device181 * handles, and we know the mount point VFS node.180 * At this point, we have all necessary pieces: file system handle 181 * and service ID, and we know the mount point VFS node. 182 182 */ 183 183 … … 187 187 exch = vfs_exchange_grab(mp_res.triplet.fs_handle); 188 188 msg = async_send_4(exch, VFS_OUT_MOUNT, 189 (sysarg_t) mp_res.triplet. devmap_handle,189 (sysarg_t) mp_res.triplet.service_id, 190 190 (sysarg_t) mp_res.triplet.index, 191 191 (sysarg_t) fs_handle, 192 (sysarg_t) devmap_handle, &answer);192 (sysarg_t) service_id, &answer); 193 193 194 194 /* Send connection */ … … 233 233 234 234 mr_res.triplet.fs_handle = fs_handle; 235 mr_res.triplet. devmap_handle = devmap_handle;235 mr_res.triplet.service_id = service_id; 236 236 mr_res.triplet.index = rindex; 237 237 mr_res.size = rsize; … … 254 254 void vfs_mount(ipc_callid_t rid, ipc_call_t *request) 255 255 { 256 devmap_handle_t devmap_handle;256 service_id_t service_id; 257 257 258 258 /* … … 261 261 * in the request. 262 262 */ 263 devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);263 service_id = (service_id_t) IPC_GET_ARG1(*request); 264 264 265 265 /* … … 349 349 350 350 /* Do the mount */ 351 vfs_mount_internal(rid, devmap_handle, fs_handle, mp, opts);351 vfs_mount_internal(rid, service_id, fs_handle, mp, opts); 352 352 free(mp); 353 353 free(fs_name); … … 408 408 */ 409 409 if (vfs_nodes_refcount_sum_get(mr_node->fs_handle, 410 mr_node-> devmap_handle) != 2) {410 mr_node->service_id) != 2) { 411 411 fibril_rwlock_write_unlock(&namespace_rwlock); 412 412 vfs_node_put(mr_node); … … 429 429 exch = vfs_exchange_grab(mr_node->fs_handle); 430 430 rc = async_req_1_0(exch, VFS_OUT_UNMOUNTED, 431 mr_node-> devmap_handle);431 mr_node->service_id); 432 432 vfs_exchange_release(exch); 433 433 … … 440 440 441 441 rootfs.fs_handle = 0; 442 rootfs. devmap_handle= 0;442 rootfs.service_id = 0; 443 443 } else { 444 444 … … 469 469 exch = vfs_exchange_grab(mp_node->fs_handle); 470 470 rc = async_req_2_0(exch, VFS_OUT_UNMOUNT, 471 mp_node-> devmap_handle, mp_node->index);471 mp_node->service_id, mp_node->index); 472 472 vfs_exchange_release(exch); 473 473 … … 574 574 if (node->size) { 575 575 rc = vfs_truncate_internal(node->fs_handle, 576 node-> devmap_handle, node->index, 0);576 node->service_id, node->index, 0); 577 577 if (rc) { 578 578 fibril_rwlock_write_unlock(&node->contents_rwlock); … … 627 627 628 628 lr.triplet.fs_handle = IPC_GET_ARG1(*request); 629 lr.triplet. devmap_handle= IPC_GET_ARG2(*request);629 lr.triplet.service_id = IPC_GET_ARG2(*request); 630 630 lr.triplet.index = IPC_GET_ARG3(*request); 631 631 int oflag = IPC_GET_ARG4(*request); … … 648 648 if (node->size) { 649 649 rc = vfs_truncate_internal(node->fs_handle, 650 node-> devmap_handle, node->index, 0);650 node->service_id, node->index, 0); 651 651 if (rc) { 652 652 fibril_rwlock_write_unlock(&node->contents_rwlock); … … 711 711 aid_t msg; 712 712 ipc_call_t answer; 713 msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node-> devmap_handle,713 msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node->service_id, 714 714 file->node->index, &answer); 715 715 … … 796 796 if (read) { 797 797 rc = async_data_read_forward_3_1(fs_exch, VFS_OUT_READ, 798 file->node-> devmap_handle, file->node->index, file->pos,798 file->node->service_id, file->node->index, file->pos, 799 799 &answer); 800 800 } else { … … 803 803 804 804 rc = async_data_write_forward_3_1(fs_exch, VFS_OUT_WRITE, 805 file->node-> devmap_handle, file->node->index, file->pos,805 file->node->service_id, file->node->index, file->pos, 806 806 &answer); 807 807 } … … 933 933 } 934 934 935 int vfs_truncate_internal(fs_handle_t fs_handle, devmap_handle_t devmap_handle,935 int vfs_truncate_internal(fs_handle_t fs_handle, service_id_t service_id, 936 936 fs_index_t index, aoff64_t size) 937 937 { 938 938 async_exch_t *exch = vfs_exchange_grab(fs_handle); 939 939 sysarg_t rc = async_req_4_0(exch, VFS_OUT_TRUNCATE, 940 (sysarg_t) devmap_handle, (sysarg_t) index, LOWER32(size),940 (sysarg_t) service_id, (sysarg_t) index, LOWER32(size), 941 941 UPPER32(size)); 942 942 vfs_exchange_release(exch); … … 961 961 fibril_rwlock_write_lock(&file->node->contents_rwlock); 962 962 rc = vfs_truncate_internal(file->node->fs_handle, 963 file->node-> devmap_handle, file->node->index, size);963 file->node->service_id, file->node->index, size); 964 964 if (rc == EOK) 965 965 file->node->size = size; … … 995 995 996 996 aid_t msg; 997 msg = async_send_3(exch, VFS_OUT_STAT, file->node-> devmap_handle,997 msg = async_send_3(exch, VFS_OUT_STAT, file->node->service_id, 998 998 file->node->index, true, NULL); 999 999 async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME); … … 1048 1048 1049 1049 aid_t msg; 1050 msg = async_send_3(exch, VFS_OUT_STAT, node-> devmap_handle,1050 msg = async_send_3(exch, VFS_OUT_STAT, node->service_id, 1051 1051 node->index, false, NULL); 1052 1052 async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME); … … 1225 1225 /* Check whether linking to the same file system instance. */ 1226 1226 if ((old_node->fs_handle != new_par_lr.triplet.fs_handle) || 1227 (old_node-> devmap_handle != new_par_lr.triplet.devmap_handle)) {1227 (old_node->service_id != new_par_lr.triplet.service_id)) { 1228 1228 fibril_rwlock_write_unlock(&namespace_rwlock); 1229 1229 vfs_node_put(old_node); -
uspace/srv/vfs/vfs_register.c
ref09a7a r15f3c3f 306 306 list_foreach(fs_list, cur) { 307 307 fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link); 308 if (str_cmp(fs->vfs_info.name, name) == 0) { 308 if (str_cmp(fs->vfs_info.name, name) == 0) { 309 309 handle = fs->fs_handle; 310 310 break;
Note:
See TracChangeset
for help on using the changeset viewer.