Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_idx.c

    r430de97 r9a15176  
    4343#include <adt/list.h>
    4444#include <assert.h>
    45 #include <fibril_synch.h>
     45#include <fibril_sync.h>
    4646
    4747/** Each instance of this type describes one interval of freed VFS indices. */
     
    149149{
    150150        dev_handle_t dev_handle = (dev_handle_t)key[UPH_DH_KEY];
    151         fat_cluster_t pfc;
    152         unsigned pdi;
     151        fat_cluster_t pfc = (fat_cluster_t)key[UPH_PFC_KEY];
     152        unsigned pdi = (unsigned)key[UPH_PDI_KEY];
    153153        fat_idx_t *fidx = list_get_instance(item, fat_idx_t, uph_link);
    154154
    155         switch (keys) {
    156         case 1:
    157                 return (dev_handle == fidx->dev_handle);
    158         case 3:
    159                 pfc = (fat_cluster_t) key[UPH_PFC_KEY];
    160                 pdi = (unsigned) key[UPH_PDI_KEY];
    161                 return (dev_handle == fidx->dev_handle) && (pfc == fidx->pfc) &&
    162                     (pdi == fidx->pdi);
    163         default:
    164                 assert((keys == 1) || (keys == 3));
    165         }
     155        return (dev_handle == fidx->dev_handle) && (pfc == fidx->pfc) &&
     156            (pdi == fidx->pdi);
    166157}
    167158
     
    206197{
    207198        dev_handle_t dev_handle = (dev_handle_t)key[UIH_DH_KEY];
    208         fs_index_t index;
     199        fs_index_t index = (fs_index_t)key[UIH_INDEX_KEY];
    209200        fat_idx_t *fidx = list_get_instance(item, fat_idx_t, uih_link);
    210201
    211         switch (keys) {
    212         case 1:
    213                 return (dev_handle == fidx->dev_handle);
    214         case 2:
    215                 index = (fs_index_t) key[UIH_INDEX_KEY];
    216                 return (dev_handle == fidx->dev_handle) &&
    217                     (index == fidx->index);
    218         default:
    219                 assert((keys == 1) || (keys == 2));
    220         }
     202        return (dev_handle == fidx->dev_handle) && (index == fidx->index);
    221203}
    222204
    223205static void idx_remove_callback(link_t *item)
    224206{
    225         fat_idx_t *fidx = list_get_instance(item, fat_idx_t, uih_link);
    226 
    227         free(fidx);
     207        /* nothing to do */
    228208}
    229209
     
    506486                [UIH_INDEX_KEY] = idx->index,
    507487        };
    508         dev_handle_t dev_handle = idx->dev_handle;
    509         fs_index_t index = idx->index;
    510488
    511489        assert(idx->pfc == FAT_CLST_RES0);
     
    520498        fibril_mutex_unlock(&used_lock);
    521499        /* Release the VFS index. */
    522         fat_index_free(dev_handle, index);
    523         /* The index structure itself is freed in idx_remove_callback(). */
     500        fat_index_free(idx->dev_handle, idx->index);
     501        /* Deallocate the structure. */
     502        free(idx);
    524503}
    525504
     
    552531        unused_initialize(u, dev_handle);
    553532        fibril_mutex_lock(&unused_lock);
    554         if (!unused_find(dev_handle, false)) {
     533        if (!unused_find(dev_handle, false))
    555534                list_append(&u->link, &unused_head);
    556         } else {
    557                 free(u);
     535        else
    558536                rc = EEXIST;
    559         }
    560537        fibril_mutex_unlock(&unused_lock);
    561538        return rc;
     
    564541void fat_idx_fini_by_dev_handle(dev_handle_t dev_handle)
    565542{
    566         unsigned long ikey[] = {
    567                 [UIH_DH_KEY] = dev_handle
    568         };
    569         unsigned long pkey[] = {
    570                 [UPH_DH_KEY] = dev_handle
    571         };
    572 
    573         /*
    574          * Remove this instance's index structure from up_hash and ui_hash.
    575          * Process up_hash first and ui_hash second because the index structure
    576          * is actually removed in idx_remove_callback().
    577          */
    578         fibril_mutex_lock(&used_lock);
    579         hash_table_remove(&up_hash, pkey, 1);
    580         hash_table_remove(&ui_hash, ikey, 1);
    581         fibril_mutex_unlock(&used_lock);
    582 
    583         /*
    584          * Free the unused and freed structures for this instance.
    585          */
    586         unused_t *u = unused_find(dev_handle, true);
     543        unused_t *u;
     544
     545        u = unused_find(dev_handle, true);
    587546        assert(u);
    588547        list_remove(&u->link);
Note: See TracChangeset for help on using the changeset viewer.