Ignore:
File:
1 edited

Legend:

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

    r96b02eb9 r8b58fc1  
    3838#include "vfs.h"
    3939#include <stdlib.h>
    40 #include <str.h>
    41 #include <fibril_synch.h>
     40#include <string.h>
     41#include <fibril_sync.h>
    4242#include <adt/hash_table.h>
    4343#include <assert.h>
     
    113113                unsigned long key[] = {
    114114                        [KEY_FS_HANDLE] = node->fs_handle,
    115                         [KEY_DEV_HANDLE] = node->devmap_handle,
     115                        [KEY_DEV_HANDLE] = node->dev_handle,
    116116                        [KEY_INDEX] = node->index
    117117                };
     
    129129                 */
    130130                int phone = vfs_grab_phone(node->fs_handle);
    131                 sysarg_t rc;
     131                ipcarg_t rc;
    132132                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);
    134134                assert(rc == EOK);
    135                 vfs_release_phone(node->fs_handle, phone);
     135                vfs_release_phone(phone);
    136136        }
    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->devmap_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
     
    175155        unsigned long key[] = {
    176156                [KEY_FS_HANDLE] = result->triplet.fs_handle,
    177                 [KEY_DEV_HANDLE] = result->triplet.devmap_handle,
     157                [KEY_DEV_HANDLE] = result->triplet.dev_handle,
    178158                [KEY_INDEX] = result->triplet.index
    179159        };
     
    191171                memset(node, 0, sizeof(vfs_node_t));
    192172                node->fs_handle = result->triplet.fs_handle;
    193                 node->devmap_handle = result->triplet.devmap_handle;
     173                node->dev_handle = result->triplet.dev_handle;
    194174                node->index = result->triplet.index;
    195175                node->size = result->size;
     
    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]) &&
    245             (node->devmap_handle == key[KEY_DEV_HANDLE]) &&
     224        return (node->fs_handle == key[KEY_FS_HANDLE]) &&
     225            (node->dev_handle == key[KEY_DEV_HANDLE]) &&
    246226            (node->index == key[KEY_INDEX]);
    247227}
     
    249229void nodes_remove_callback(link_t *item)
    250230{
    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 unsigned
    271 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_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;
    284231}
    285232
Note: See TracChangeset for help on using the changeset viewer.