Changes in uspace/srv/vfs/vfs_node.c [96b02eb9:8b58fc1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/vfs/vfs_node.c
r96b02eb9 r8b58fc1 38 38 #include "vfs.h" 39 39 #include <stdlib.h> 40 #include <str .h>41 #include <fibril_sync h.h>40 #include <string.h> 41 #include <fibril_sync.h> 42 42 #include <adt/hash_table.h> 43 43 #include <assert.h> … … 113 113 unsigned long key[] = { 114 114 [KEY_FS_HANDLE] = node->fs_handle, 115 [KEY_DEV_HANDLE] = node->dev map_handle,115 [KEY_DEV_HANDLE] = node->dev_handle, 116 116 [KEY_INDEX] = node->index 117 117 }; … … 129 129 */ 130 130 int phone = vfs_grab_phone(node->fs_handle); 131 sysarg_t rc;131 ipcarg_t rc; 132 132 rc = async_req_2_0(phone, VFS_OUT_DESTROY, 133 ( sysarg_t)node->devmap_handle, (sysarg_t)node->index);133 (ipcarg_t)node->dev_handle, (ipcarg_t)node->index); 134 134 assert(rc == EOK); 135 vfs_release_phone( node->fs_handle,phone);135 vfs_release_phone(phone); 136 136 } 137 137 if (free_vfs_node) 138 138 free(node); 139 }140 141 /** Forget node.142 *143 * This function will remove the node from the node hash table and deallocate144 * its memory, regardless of the node's reference count.145 *146 * @param node Node to be forgotten.147 */148 void vfs_node_forget(vfs_node_t *node)149 {150 fibril_mutex_lock(&nodes_mutex);151 unsigned long key[] = {152 [KEY_FS_HANDLE] = node->fs_handle,153 [KEY_DEV_HANDLE] = node->devmap_handle,154 [KEY_INDEX] = node->index155 };156 hash_table_remove(&nodes, key, 3);157 fibril_mutex_unlock(&nodes_mutex);158 free(node);159 139 } 160 140 … … 175 155 unsigned long key[] = { 176 156 [KEY_FS_HANDLE] = result->triplet.fs_handle, 177 [KEY_DEV_HANDLE] = result->triplet.dev map_handle,157 [KEY_DEV_HANDLE] = result->triplet.dev_handle, 178 158 [KEY_INDEX] = result->triplet.index 179 159 }; … … 191 171 memset(node, 0, sizeof(vfs_node_t)); 192 172 node->fs_handle = result->triplet.fs_handle; 193 node->dev map_handle = result->triplet.devmap_handle;173 node->dev_handle = result->triplet.dev_handle; 194 174 node->index = result->triplet.index; 195 175 node->size = result->size; … … 242 222 { 243 223 vfs_node_t *node = hash_table_get_instance(item, vfs_node_t, nh_link); 244 return (node->fs_handle == (fs_handle_t)key[KEY_FS_HANDLE]) &&245 (node->dev map_handle == key[KEY_DEV_HANDLE]) &&224 return (node->fs_handle == key[KEY_FS_HANDLE]) && 225 (node->dev_handle == key[KEY_DEV_HANDLE]) && 246 226 (node->index == key[KEY_INDEX]); 247 227 } … … 249 229 void nodes_remove_callback(link_t *item) 250 230 { 251 }252 253 struct refcnt_data {254 /** Sum of all reference counts for this file system instance. */255 unsigned refcnt;256 fs_handle_t fs_handle;257 devmap_handle_t devmap_handle;258 };259 260 static void refcnt_visitor(link_t *item, void *arg)261 {262 vfs_node_t *node = hash_table_get_instance(item, vfs_node_t, nh_link);263 struct refcnt_data *rd = (void *) arg;264 265 if ((node->fs_handle == rd->fs_handle) &&266 (node->devmap_handle == rd->devmap_handle))267 rd->refcnt += node->refcnt;268 }269 270 unsigned271 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, devmap_handle_t devmap_handle)272 {273 struct refcnt_data rd = {274 .refcnt = 0,275 .fs_handle = fs_handle,276 .devmap_handle = devmap_handle277 };278 279 fibril_mutex_lock(&nodes_mutex);280 hash_table_apply(&nodes, refcnt_visitor, &rd);281 fibril_mutex_unlock(&nodes_mutex);282 283 return rd.refcnt;284 231 } 285 232
Note:
See TracChangeset
for help on using the changeset viewer.