Ignore:
File:
1 edited

Legend:

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

    r15f3c3f r79ae36dd  
    5252#include "vfs.h"
    5353
    54 FIBRIL_CONDVAR_INITIALIZE(fs_list_cv);
    55 FIBRIL_MUTEX_INITIALIZE(fs_list_lock);
    56 LIST_INITIALIZE(fs_list);
     54FIBRIL_CONDVAR_INITIALIZE(fs_head_cv);
     55FIBRIL_MUTEX_INITIALIZE(fs_head_lock);
     56LIST_INITIALIZE(fs_head);
    5757
    5858atomic_t fs_handle_next = {
     
    149149        }
    150150       
    151         fibril_mutex_lock(&fs_list_lock);
     151        fibril_mutex_lock(&fs_head_lock);
    152152       
    153153        /*
     
    159159                 */
    160160                dprintf("FS is already registered.\n");
    161                 fibril_mutex_unlock(&fs_list_lock);
     161                fibril_mutex_unlock(&fs_head_lock);
    162162                free(fs_info);
    163163                async_answer_0(rid, EEXISTS);
     
    169169         */
    170170        dprintf("Inserting FS into the list of registered file systems.\n");
    171         list_append(&fs_info->fs_link, &fs_list);
     171        list_append(&fs_info->fs_link, &fs_head);
    172172       
    173173        /*
     
    180180                dprintf("Callback connection expected\n");
    181181                list_remove(&fs_info->fs_link);
    182                 fibril_mutex_unlock(&fs_list_lock);
     182                fibril_mutex_unlock(&fs_head_lock);
    183183                free(fs_info);
    184184                async_answer_0(rid, EINVAL);
     
    197197                dprintf("Unexpected call, method = %d\n", IPC_GET_IMETHOD(call));
    198198                list_remove(&fs_info->fs_link);
    199                 fibril_mutex_unlock(&fs_list_lock);
     199                fibril_mutex_unlock(&fs_head_lock);
    200200                async_hangup(fs_info->sess);
    201201                free(fs_info);
     
    211211                dprintf("Client suggests wrong size of PFB, size = %d\n", size);
    212212                list_remove(&fs_info->fs_link);
    213                 fibril_mutex_unlock(&fs_list_lock);
     213                fibril_mutex_unlock(&fs_head_lock);
    214214                async_hangup(fs_info->sess);
    215215                free(fs_info);
     
    235235        async_answer_1(rid, EOK, (sysarg_t) fs_info->fs_handle);
    236236       
    237         fibril_condvar_broadcast(&fs_list_cv);
    238         fibril_mutex_unlock(&fs_list_lock);
     237        fibril_condvar_broadcast(&fs_head_cv);
     238        fibril_mutex_unlock(&fs_head_lock);
    239239       
    240240        dprintf("\"%.*s\" filesystem successfully registered, handle=%d.\n",
     
    254254        /*
    255255         * For now, we don't try to be very clever and very fast.
    256          * We simply lookup the session in fs_list and
     256         * We simply lookup the session in the fs_head list and
    257257         * begin an exchange.
    258258         */
    259         fibril_mutex_lock(&fs_list_lock);
    260        
    261         list_foreach(fs_list, cur) {
     259        fibril_mutex_lock(&fs_head_lock);
     260       
     261        link_t *cur;
     262        for (cur = fs_head.next; cur != &fs_head; cur = cur->next) {
    262263                fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
    263264               
    264265                if (fs->fs_handle == handle) {
    265                         fibril_mutex_unlock(&fs_list_lock);
     266                        fibril_mutex_unlock(&fs_head_lock);
    266267                       
    267268                        assert(fs->sess);
     
    273274        }
    274275       
    275         fibril_mutex_unlock(&fs_list_lock);
     276        fibril_mutex_unlock(&fs_head_lock);
    276277       
    277278        return NULL;
     
    292293 * @param name File system name.
    293294 * @param lock If true, the function will lock and unlock the
    294  *             fs_list_lock.
     295 *             fs_head_lock.
    295296 *
    296297 * @return File system handle or zero if file system not found.
     
    302303       
    303304        if (lock)
    304                 fibril_mutex_lock(&fs_list_lock);
    305        
    306         list_foreach(fs_list, cur) {
     305                fibril_mutex_lock(&fs_head_lock);
     306       
     307        link_t *cur;
     308        for (cur = fs_head.next; cur != &fs_head; cur = cur->next) {
    307309                fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
    308                 if (str_cmp(fs->vfs_info.name, name) == 0) {
     310                if (str_cmp(fs->vfs_info.name, name) == 0) { 
    309311                        handle = fs->fs_handle;
    310312                        break;
     
    313315       
    314316        if (lock)
    315                 fibril_mutex_unlock(&fs_list_lock);
     317                fibril_mutex_unlock(&fs_head_lock);
    316318       
    317319        return handle;
     
    328330{
    329331        vfs_info_t *info = NULL;
    330        
    331         fibril_mutex_lock(&fs_list_lock);
    332         list_foreach(fs_list, cur) {
     332        link_t *cur;
     333       
     334        fibril_mutex_lock(&fs_head_lock);
     335        for (cur = fs_head.next; cur != &fs_head; cur = cur->next) {
    333336                fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link);
    334337                if (fs->fs_handle == handle) {
     
    337340                }
    338341        }
    339         fibril_mutex_unlock(&fs_list_lock);
     342        fibril_mutex_unlock(&fs_head_lock);
    340343       
    341344        return info;
Note: See TracChangeset for help on using the changeset viewer.