Changes in uspace/srv/vfs/vfs_node.c [96b02eb9:44451ee] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_node.c
r96b02eb9 r44451ee 104 104 bool free_vfs_node = false; 105 105 bool free_fs_node = false; 106 107 fibril_mutex_lock(&nodes_mutex); 106 107 fibril_mutex_lock(&nodes_mutex); 108 108 109 if (node->refcnt-- == 1) { 110 109 111 /* 110 112 * We are dropping the last reference to this node. 111 113 * Remove it from the VFS node hash table. 112 114 */ 115 113 116 unsigned long key[] = { 114 117 [KEY_FS_HANDLE] = node->fs_handle, … … 116 119 [KEY_INDEX] = node->index 117 120 }; 121 118 122 hash_table_remove(&nodes, key, 3); 119 123 free_vfs_node = true; 124 120 125 if (!node->lnkcnt) 121 126 free_fs_node = true; 122 127 } 123 fibril_mutex_unlock(&nodes_mutex); 124 128 129 fibril_mutex_unlock(&nodes_mutex); 130 125 131 if (free_fs_node) { 126 /* 132 133 /* 127 134 * The node is not visible in the file system namespace. 128 135 * Free up its resources. 129 136 */ 130 int phone = vfs_grab_phone(node->fs_handle); 131 sysarg_t rc; 132 rc = async_req_2_0(phone, VFS_OUT_DESTROY, 133 (sysarg_t)node->devmap_handle, (sysarg_t)node->index); 137 138 async_exch_t *exch = vfs_exchange_grab(node->fs_handle); 139 sysarg_t rc = async_req_2_0(exch, VFS_OUT_DESTROY, 140 (sysarg_t) node->devmap_handle, (sysarg_t)node->index); 141 134 142 assert(rc == EOK); 135 vfs_ release_phone(node->fs_handle, phone);143 vfs_exchange_release(exch); 136 144 } 145 137 146 if (free_vfs_node) 138 147 free(node); … … 284 293 } 285 294 295 296 /** Perform a remote node open operation. 297 * 298 * @return EOK on success or an error code from errno.h. 299 * 300 */ 301 int vfs_open_node_remote(vfs_node_t *node) 302 { 303 async_exch_t *exch = vfs_exchange_grab(node->fs_handle); 304 305 ipc_call_t answer; 306 aid_t req = async_send_2(exch, VFS_OUT_OPEN_NODE, 307 (sysarg_t) node->devmap_handle, (sysarg_t) node->index, &answer); 308 309 vfs_exchange_release(exch); 310 311 sysarg_t rc; 312 async_wait_for(req, &rc); 313 314 return rc; 315 } 316 286 317 /** 287 318 * @}
Note:
See TracChangeset
for help on using the changeset viewer.