Changeset 5bf76c1 in mainline for uspace/srv/fs/mfs/mfs_ops.c
- Timestamp:
- 2011-09-24T16:15:41Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 32f623d9
- Parents:
- 925a21e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/mfs/mfs_ops.c
r925a21e r5bf76c1 73 73 74 74 75 static LIST_INITIALIZE(inst_list);76 static FIBRIL_MUTEX_INITIALIZE(inst_list_mutex);77 75 static hash_table_t open_nodes; 78 76 static FIBRIL_MUTEX_INITIALIZE(open_nodes_lock); … … 179 177 return ENOMEM; 180 178 } 181 182 instance->open_nodes_cnt = 0;183 179 184 180 sb = malloc(MFS_SUPERBLOCK_SIZE); … … 268 264 free(instance); 269 265 free(sbi); 270 free(sb);271 266 block_cache_fini(service_id); 272 267 block_fini(service_id); … … 275 270 } 276 271 277 /*Initialize the instance structure and add it to the list*/ 278 link_initialize(&instance->link); 272 /*Initialize the instance structure and remember it*/ 279 273 instance->service_id = service_id; 280 274 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 } 285 285 286 286 mfsdebug("mount successful\n"); … … 315 315 block_fini(service_id); 316 316 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); 322 319 free(inst->sbi); 323 320 free(inst); … … 1012 1009 mfs_instance_get(service_id_t service_id, struct mfs_instance **instance) 1013 1010 { 1014 struct mfs_instance *instance_ptr; 1015 1016 fibril_mutex_lock(&inst_list_mutex); 1017 1018 if (list_empty(&inst_list)) { 1019 fibril_mutex_unlock(&inst_list_mutex); 1020 return EINVAL; 1021 } 1022 1023 list_foreach(inst_list, link) { 1024 instance_ptr = list_get_instance(link, struct mfs_instance, 1025 link); 1026 1027 if (instance_ptr->service_id == service_id) { 1028 *instance = instance_ptr; 1029 fibril_mutex_unlock(&inst_list_mutex); 1030 return EOK; 1031 } 1032 } 1033 1034 mfsdebug("Instance not found\n"); 1035 1036 fibril_mutex_unlock(&inst_list_mutex); 1037 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; 1038 1022 } 1039 1023
Note:
See TracChangeset
for help on using the changeset viewer.