Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/mfs/mfs_ops.c

    r7a46bfe r5bf76c1  
    5555static int mfs_has_children(bool *has_children, fs_node_t *fsnode);
    5656static int mfs_root_get(fs_node_t **rfn, service_id_t service_id);
    57 static service_id_t mfs_device_get(fs_node_t *fsnode);
     57static service_id_t mfs_service_get(fs_node_t *fsnode);
    5858static aoff64_t mfs_size_get(fs_node_t *node);
    5959static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component);
     
    7373
    7474
    75 static LIST_INITIALIZE(inst_list);
    76 static FIBRIL_MUTEX_INITIALIZE(inst_list_mutex);
    7775static hash_table_t open_nodes;
    7876static FIBRIL_MUTEX_INITIALIZE(open_nodes_lock);
     
    8179        .size_get = mfs_size_get,
    8280        .root_get = mfs_root_get,
    83         .device_get = mfs_device_get,
     81        .service_get = mfs_service_get,
    8482        .is_directory = mfs_is_directory,
    8583        .is_file = mfs_is_file,
     
    179177                return ENOMEM;
    180178        }
    181 
    182         instance->open_nodes_cnt = 0;
    183179
    184180        sb = malloc(MFS_SUPERBLOCK_SIZE);
     
    268264                free(instance);
    269265                free(sbi);
    270                 free(sb);
    271266                block_cache_fini(service_id);
    272267                block_fini(service_id);
     
    275270        }
    276271
    277         /*Initialize the instance structure and add it to the list*/
    278         link_initialize(&instance->link);
     272        /*Initialize the instance structure and remember it*/
    279273        instance->service_id = service_id;
    280274        instance->sbi = sbi;
    281 
    282         fibril_mutex_lock(&inst_list_mutex);
    283         list_append(&instance->link, &inst_list);
    284         fibril_mutex_unlock(&inst_list_mutex);
     275        instance->open_nodes_cnt = 0;
     276        rc = fs_instance_create(service_id, instance);
     277        if (rc != EOK) {
     278                free(instance);
     279                free(sbi);
     280                block_cache_fini(service_id);
     281                block_fini(service_id);
     282                mfsdebug("fs instance creation failed\n");
     283                return rc;
     284        }
    285285
    286286        mfsdebug("mount successful\n");
     
    315315        block_fini(service_id);
    316316
    317         /* Remove the instance from the list */
    318         fibril_mutex_lock(&inst_list_mutex);
    319         list_remove(&inst->link);
    320         fibril_mutex_unlock(&inst_list_mutex);
    321 
     317        /* Remove and destroy the instance */
     318        (void) fs_instance_destroy(service_id);
    322319        free(inst->sbi);
    323320        free(inst);
     
    325322}
    326323
    327 service_id_t mfs_device_get(fs_node_t *fsnode)
     324service_id_t mfs_service_get(fs_node_t *fsnode)
    328325{
    329326        struct mfs_node *node = fsnode->data;
     
    468465static aoff64_t mfs_size_get(fs_node_t *node)
    469466{
    470         assert(node);
    471 
    472467        const struct mfs_node *mnode = node->data;
    473         assert(mnode);
    474         assert(mnode->ino_i);
    475 
    476468        return mnode->ino_i->i_size;
    477469}
     
    513505                assert(mnode->instance->open_nodes_cnt > 0);
    514506                mnode->instance->open_nodes_cnt--;
    515                 rc = mfs_put_inode_core(mnode);
     507                rc = mfs_put_inode(mnode);
    516508                free(mnode->ino_i);
    517509                free(mnode);
     
    535527{
    536528        struct mfs_node *mnode = fsnode->data;
    537 
    538         assert(mnode->ino_i);
    539529        return mnode->ino_i->index;
    540530}
     
    10191009mfs_instance_get(service_id_t service_id, struct mfs_instance **instance)
    10201010{
    1021         struct mfs_instance *instance_ptr;
    1022 
    1023         fibril_mutex_lock(&inst_list_mutex);
    1024 
    1025         if (list_empty(&inst_list)) {
    1026                 fibril_mutex_unlock(&inst_list_mutex);
    1027                 return EINVAL;
    1028         }
    1029 
    1030         list_foreach(inst_list, link) {
    1031                 instance_ptr = list_get_instance(link, struct mfs_instance,
    1032                                                  link);
    1033 
    1034                 if (instance_ptr->service_id == service_id) {
    1035                         *instance = instance_ptr;
    1036                         fibril_mutex_unlock(&inst_list_mutex);
    1037                         return EOK;
    1038                 }
    1039         }
    1040 
    1041         mfsdebug("Instance not found\n");
    1042 
    1043         fibril_mutex_unlock(&inst_list_mutex);
    1044         return EINVAL;
     1011        void *data;
     1012        int rc;
     1013
     1014        rc = fs_instance_get(service_id, &data);
     1015        if (rc == EOK) {
     1016                *instance = (struct mfs_instance *) data;
     1017        } else {
     1018                mfsdebug("instance not found\n");
     1019        }
     1020
     1021        return rc;
    10451022}
    10461023
Note: See TracChangeset for help on using the changeset viewer.