Changeset 41811af in mainline for uspace/srv/vfs/vfs_node.c
- Timestamp:
- 2011-06-10T10:14:26Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ab547063
- Parents:
- 9536e6e (diff), 390d80d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_node.c
r9536e6e r41811af 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);
Note:
See TracChangeset
for help on using the changeset viewer.