Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_node.c

    red903174 r1e4cada  
    137137        if (free_vfs_node)
    138138                free(node);
    139 }
    140 
    141 /** Forget node.
    142  *
    143  * This function will remove the node from the node hash table and deallocate
    144  * 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->dev_handle,
    154                 [KEY_INDEX] = node->index
    155         };
    156         hash_table_remove(&nodes, key, 3);
    157         fibril_mutex_unlock(&nodes_mutex);
    158         free(node);
    159139}
    160140
     
    242222{
    243223        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]) &&
     224        return (node->fs_handle == key[KEY_FS_HANDLE]) &&
    245225            (node->dev_handle == key[KEY_DEV_HANDLE]) &&
    246226            (node->index == key[KEY_INDEX]);
     
    251231}
    252232
    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         dev_handle_t dev_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->dev_handle == rd->dev_handle))
    267                 rd->refcnt += node->refcnt;
    268 }
    269 
    270 unsigned
    271 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, dev_handle_t dev_handle)
    272 {
    273         struct refcnt_data rd = {
    274                 .refcnt = 0,
    275                 .fs_handle = fs_handle,
    276                 .dev_handle = dev_handle
    277         };
    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 }
    285 
    286233/**
    287234 * @}
Note: See TracChangeset for help on using the changeset viewer.