Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/tmpfs/tmpfs_ops.c

    re056e820 r1313ee9  
    147147hash_table_t nodes;
    148148
    149 #define NODES_KEY_DEV   0       
    150 #define NODES_KEY_INDEX 1
     149#define NODES_KEY_INDEX 0
     150#define NODES_KEY_DEV   1
    151151
    152152/* Implementation of hash table interface for the nodes hash table. */
     
    166166static void nodes_remove_callback(link_t *item)
    167167{
    168         tmpfs_node_t *nodep = hash_table_get_instance(item, tmpfs_node_t,
    169             nh_link);
    170 
    171         while (!list_empty(&nodep->cs_head)) {
    172                 tmpfs_dentry_t *dentryp = list_get_instance(nodep->cs_head.next,
    173                     tmpfs_dentry_t, link);
    174 
    175                 assert(nodep->type == TMPFS_DIRECTORY);
    176                 list_remove(&dentryp->link);
    177                 free(dentryp);
    178         }
    179 
    180         if (nodep->data) {
    181                 assert(nodep->type == TMPFS_FILE);
    182                 free(nodep->data);
    183         }
    184         free(nodep->bp);
    185         free(nodep);
    186168}
    187169
     
    233215}
    234216
    235 static void tmpfs_instance_done(dev_handle_t dev_handle)
    236 {
    237         unsigned long key[] = {
    238                 [NODES_KEY_DEV] = dev_handle
    239         };
    240         /*
    241          * Here we are making use of one special feature of our hash table
    242          * implementation, which allows to remove more items based on a partial
    243          * key match. In the following, we are going to remove all nodes
    244          * matching our device handle. The nodes_remove_callback() function will
    245          * take care of resource deallocation.
    246          */
    247         hash_table_remove(&nodes, key, 1);
    248 }
    249 
    250217int tmpfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
    251218{
     
    270237{
    271238        unsigned long key[] = {
    272                 [NODES_KEY_DEV] = dev_handle,
    273                 [NODES_KEY_INDEX] = index
     239                [NODES_KEY_INDEX] = index,
     240                [NODES_KEY_DEV] = dev_handle
    274241        };
    275242        link_t *lnk = hash_table_find(&nodes, key);
     
    329296        /* Insert the new node into the nodes hash table. */
    330297        unsigned long key[] = {
    331                 [NODES_KEY_DEV] = nodep->dev_handle,
    332                 [NODES_KEY_INDEX] = nodep->index
     298                [NODES_KEY_INDEX] = nodep->index,
     299                [NODES_KEY_DEV] = nodep->dev_handle
    333300        };
    334301        hash_table_insert(&nodes, key, &nodep->nh_link);
     
    345312
    346313        unsigned long key[] = {
    347                 [NODES_KEY_DEV] = nodep->dev_handle,
    348                 [NODES_KEY_INDEX] = nodep->index
     314                [NODES_KEY_INDEX] = nodep->index,
     315                [NODES_KEY_DEV] = nodep->dev_handle
    349316        };
    350317        hash_table_remove(&nodes, key, 2);
    351318
    352         /*
    353          * The nodes_remove_callback() function takes care of the actual
    354          * resource deallocation.
    355          */
     319        if (nodep->type == TMPFS_FILE)
     320                free(nodep->data);
     321        free(nodep->bp);
     322        free(nodep);
    356323        return EOK;
    357324}
     
    457424        /* Initialize TMPFS instance. */
    458425        if (!tmpfs_instance_init(dev_handle)) {
    459                 free(opts);
    460426                ipc_answer_0(rid, ENOMEM);
    461427                return;
     
    476442                    rootp->lnkcnt);
    477443        }
    478         free(opts);
    479444}
    480445
     
    482447{
    483448        libfs_mount(&tmpfs_libfs_ops, tmpfs_reg.fs_handle, rid, request);
    484 }
    485 
    486 void tmpfs_unmounted(ipc_callid_t rid, ipc_call_t *request)
    487 {
    488         dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request);
    489 
    490         tmpfs_instance_done(dev_handle);
    491         ipc_answer_0(rid, EOK);
    492 }
    493 
    494 void tmpfs_unmount(ipc_callid_t rid, ipc_call_t *request)
    495 {
    496         libfs_unmount(&tmpfs_libfs_ops, rid, request);
    497449}
    498450
     
    513465        link_t *hlp;
    514466        unsigned long key[] = {
     467                [NODES_KEY_INDEX] = index,
    515468                [NODES_KEY_DEV] = dev_handle,
    516                 [NODES_KEY_INDEX] = index
    517469        };
    518470        hlp = hash_table_find(&nodes, key);
     
    587539        link_t *hlp;
    588540        unsigned long key[] = {
    589                 [NODES_KEY_DEV] = dev_handle,
    590                 [NODES_KEY_INDEX] = index
     541                [NODES_KEY_INDEX] = index,
     542                [NODES_KEY_DEV] = dev_handle
    591543        };
    592544        hlp = hash_table_find(&nodes, key);
     
    651603        link_t *hlp;
    652604        unsigned long key[] = {
    653                 [NODES_KEY_DEV] = dev_handle,
    654                 [NODES_KEY_INDEX] = index
     605                [NODES_KEY_INDEX] = index,
     606                [NODES_KEY_DEV] = dev_handle
    655607        };
    656608        hlp = hash_table_find(&nodes, key);
     
    694646        link_t *hlp;
    695647        unsigned long key[] = {
    696                 [NODES_KEY_DEV] = dev_handle,
    697                 [NODES_KEY_INDEX] = index
     648                [NODES_KEY_INDEX] = index,
     649                [NODES_KEY_DEV] = dev_handle
    698650        };
    699651        hlp = hash_table_find(&nodes, key);
Note: See TracChangeset for help on using the changeset viewer.