Changeset 6ebe721 in mainline for uspace/srv/fs/fat/fat_idx.c


Ignore:
Timestamp:
2009-06-17T22:07:42Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4e1b57d
Parents:
34ca870
Message:

Use fibril synchronization in FAT.

File:
1 edited

Legend:

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

    r34ca870 r6ebe721  
    4343#include <adt/list.h>
    4444#include <assert.h>
    45 #include <futex.h>
     45#include <fibril_sync.h>
    4646
    4747/** Each instance of this type describes one interval of freed VFS indices. */
     
    6969} unused_t;
    7070
    71 /** Futex protecting the list of unused structures. */
    72 static futex_t unused_futex = FUTEX_INITIALIZER;
     71/** Mutex protecting the list of unused structures. */
     72static FIBRIL_MUTEX_INITIALIZE(unused_lock);
    7373
    7474/** List of unused structures. */
     
    9090
    9191        if (lock)
    92                 futex_down(&unused_futex);
     92                fibril_mutex_lock(&unused_lock);
    9393        for (l = unused_head.next; l != &unused_head; l = l->next) {
    9494                u = list_get_instance(l, unused_t, link);
     
    9797        }
    9898        if (lock)
    99                 futex_up(&unused_futex);
     99                fibril_mutex_unlock(&unused_lock);
    100100        return NULL;
    101101}
    102102
    103 /** Futex protecting the up_hash and ui_hash. */
    104 static futex_t used_futex = FUTEX_INITIALIZER;
     103/** Mutex protecting the up_hash and ui_hash. */
     104static FIBRIL_MUTEX_INITIALIZE(used_lock);
    105105
    106106/**
     
    232232                        *index = u->next++;
    233233                        --u->remaining;
    234                         futex_up(&unused_futex);
     234                        fibril_mutex_unlock(&unused_lock);
    235235                        return true;
    236236                }
     
    245245                        free(f);
    246246                }
    247                 futex_up(&unused_futex);
     247                fibril_mutex_unlock(&unused_lock);
    248248                return true;
    249249        }
     
    253253         * too many zero-sized nodes).
    254254         */
    255         futex_up(&unused_futex);
     255        fibril_mutex_unlock(&unused_lock);
    256256        return false;
    257257}
     
    303303                                        try_coalesce_intervals(lnk->prev, lnk,
    304304                                            lnk);
    305                                 futex_up(&unused_futex);
     305                                fibril_mutex_unlock(&unused_lock);
    306306                                return;
    307307                        }
     
    311311                                        try_coalesce_intervals(lnk, lnk->next,
    312312                                            lnk);
    313                                 futex_up(&unused_futex);
     313                                fibril_mutex_unlock(&unused_lock);
    314314                                return;
    315315                        }
     
    322322                                n->last = index;
    323323                                list_insert_before(&n->link, lnk);
    324                                 futex_up(&unused_futex);
     324                                fibril_mutex_unlock(&unused_lock);
    325325                                return;
    326326                        }
     
    336336                list_append(&n->link, &u->freed_head);
    337337        }
    338         futex_up(&unused_futex);
     338        fibril_mutex_unlock(&unused_lock);
    339339}
    340340
     
    353353        link_initialize(&fidx->uph_link);
    354354        link_initialize(&fidx->uih_link);
    355         futex_initialize(&fidx->lock, 1);
     355        fibril_mutex_initialize(&fidx->lock);
    356356        fidx->dev_handle = dev_handle;
    357357        fidx->pfc = FAT_CLST_RES0;      /* no parent yet */
     
    366366        fat_idx_t *fidx;
    367367
    368         futex_down(&used_futex);
     368        fibril_mutex_lock(&used_lock);
    369369        fidx = fat_idx_create(dev_handle);
    370370        if (!fidx) {
    371                 futex_up(&used_futex);
     371                fibril_mutex_unlock(&used_lock);
    372372                return NULL;
    373373        }
     
    379379       
    380380        hash_table_insert(&ui_hash, ikey, &fidx->uih_link);
    381         futex_down(&fidx->lock);
    382         futex_up(&used_futex);
     381        fibril_mutex_lock(&fidx->lock);
     382        fibril_mutex_unlock(&used_lock);
    383383
    384384        return fidx;
     
    396396        };
    397397
    398         futex_down(&used_futex);
     398        fibril_mutex_lock(&used_lock);
    399399        l = hash_table_find(&up_hash, pkey);
    400400        if (l) {
     
    403403                fidx = fat_idx_create(dev_handle);
    404404                if (!fidx) {
    405                         futex_up(&used_futex);
     405                        fibril_mutex_unlock(&used_lock);
    406406                        return NULL;
    407407                }
     
    418418                hash_table_insert(&ui_hash, ikey, &fidx->uih_link);
    419419        }
    420         futex_down(&fidx->lock);
    421         futex_up(&used_futex);
     420        fibril_mutex_lock(&fidx->lock);
     421        fibril_mutex_unlock(&used_lock);
    422422
    423423        return fidx;
     
    432432        };
    433433
    434         futex_down(&used_futex);
     434        fibril_mutex_lock(&used_lock);
    435435        hash_table_insert(&up_hash, pkey, &idx->uph_link);
    436         futex_up(&used_futex);
     436        fibril_mutex_unlock(&used_lock);
    437437}
    438438
     
    445445        };
    446446
    447         futex_down(&used_futex);
     447        fibril_mutex_lock(&used_lock);
    448448        hash_table_remove(&up_hash, pkey, 3);
    449         futex_up(&used_futex);
     449        fibril_mutex_unlock(&used_lock);
    450450}
    451451
     
    460460        };
    461461
    462         futex_down(&used_futex);
     462        fibril_mutex_lock(&used_lock);
    463463        l = hash_table_find(&ui_hash, ikey);
    464464        if (l) {
     
    466466                futex_down(&fidx->lock);
    467467        }
    468         futex_up(&used_futex);
     468        fibril_mutex_unlock(&used_lock);
    469469
    470470        return fidx;
     
    484484        assert(idx->pfc == FAT_CLST_RES0);
    485485
    486         futex_down(&used_futex);
     486        fibril_mutex_lock(&used_lock);
    487487        /*
    488488         * Since we can only free unlinked nodes, the index structure is not
     
    491491         */
    492492        hash_table_remove(&ui_hash, ikey, 2);
    493         futex_up(&used_futex);
     493        fibril_mutex_unlock(&used_lock);
    494494        /* Release the VFS index. */
    495495        fat_index_free(idx->dev_handle, idx->index);
     
    525525                return ENOMEM;
    526526        unused_initialize(u, dev_handle);
    527         futex_down(&unused_futex);
     527        fibril_mutex_lock(&unused_lock);
    528528        if (!unused_find(dev_handle, false))
    529529                list_append(&u->link, &unused_head);
    530530        else
    531531                rc = EEXIST;
    532         futex_up(&unused_futex);
     532        fibril_mutex_unlock(&unused_lock);
    533533        return rc;
    534534}
     
    541541        assert(u);
    542542        list_remove(&u->link);
    543         futex_up(&unused_futex);
     543        fibril_mutex_unlock(&unused_lock);
    544544
    545545        while (!list_empty(&u->freed_head)) {
Note: See TracChangeset for help on using the changeset viewer.