Changes in uspace/srv/fs/tmpfs/tmpfs_ops.c [e056e820:1313ee9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/tmpfs/tmpfs_ops.c
re056e820 r1313ee9 147 147 hash_table_t nodes; 148 148 149 #define NODES_KEY_ DEV 0150 #define NODES_KEY_ INDEX1149 #define NODES_KEY_INDEX 0 150 #define NODES_KEY_DEV 1 151 151 152 152 /* Implementation of hash table interface for the nodes hash table. */ … … 166 166 static void nodes_remove_callback(link_t *item) 167 167 { 168 tmpfs_node_t *nodep = hash_table_get_instance(item, tmpfs_node_t,169 nh_link);170 171 while (!list_empty(&nodep->cs_head)) {172 tmpfs_dentry_t *dentryp = list_get_instance(nodep->cs_head.next,173 tmpfs_dentry_t, link);174 175 assert(nodep->type == TMPFS_DIRECTORY);176 list_remove(&dentryp->link);177 free(dentryp);178 }179 180 if (nodep->data) {181 assert(nodep->type == TMPFS_FILE);182 free(nodep->data);183 }184 free(nodep->bp);185 free(nodep);186 168 } 187 169 … … 233 215 } 234 216 235 static void tmpfs_instance_done(dev_handle_t dev_handle)236 {237 unsigned long key[] = {238 [NODES_KEY_DEV] = dev_handle239 };240 /*241 * Here we are making use of one special feature of our hash table242 * implementation, which allows to remove more items based on a partial243 * key match. In the following, we are going to remove all nodes244 * matching our device handle. The nodes_remove_callback() function will245 * take care of resource deallocation.246 */247 hash_table_remove(&nodes, key, 1);248 }249 250 217 int tmpfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component) 251 218 { … … 270 237 { 271 238 unsigned long key[] = { 272 [NODES_KEY_ DEV] = dev_handle,273 [NODES_KEY_ INDEX] = index239 [NODES_KEY_INDEX] = index, 240 [NODES_KEY_DEV] = dev_handle 274 241 }; 275 242 link_t *lnk = hash_table_find(&nodes, key); … … 329 296 /* Insert the new node into the nodes hash table. */ 330 297 unsigned long key[] = { 331 [NODES_KEY_ DEV] = nodep->dev_handle,332 [NODES_KEY_ INDEX] = nodep->index298 [NODES_KEY_INDEX] = nodep->index, 299 [NODES_KEY_DEV] = nodep->dev_handle 333 300 }; 334 301 hash_table_insert(&nodes, key, &nodep->nh_link); … … 345 312 346 313 unsigned long key[] = { 347 [NODES_KEY_ DEV] = nodep->dev_handle,348 [NODES_KEY_ INDEX] = nodep->index314 [NODES_KEY_INDEX] = nodep->index, 315 [NODES_KEY_DEV] = nodep->dev_handle 349 316 }; 350 317 hash_table_remove(&nodes, key, 2); 351 318 352 /*353 * The nodes_remove_callback() function takes care of the actual354 * resource deallocation.355 */319 if (nodep->type == TMPFS_FILE) 320 free(nodep->data); 321 free(nodep->bp); 322 free(nodep); 356 323 return EOK; 357 324 } … … 457 424 /* Initialize TMPFS instance. */ 458 425 if (!tmpfs_instance_init(dev_handle)) { 459 free(opts);460 426 ipc_answer_0(rid, ENOMEM); 461 427 return; … … 476 442 rootp->lnkcnt); 477 443 } 478 free(opts);479 444 } 480 445 … … 482 447 { 483 448 libfs_mount(&tmpfs_libfs_ops, tmpfs_reg.fs_handle, rid, request); 484 }485 486 void tmpfs_unmounted(ipc_callid_t rid, ipc_call_t *request)487 {488 dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request);489 490 tmpfs_instance_done(dev_handle);491 ipc_answer_0(rid, EOK);492 }493 494 void tmpfs_unmount(ipc_callid_t rid, ipc_call_t *request)495 {496 libfs_unmount(&tmpfs_libfs_ops, rid, request);497 449 } 498 450 … … 513 465 link_t *hlp; 514 466 unsigned long key[] = { 467 [NODES_KEY_INDEX] = index, 515 468 [NODES_KEY_DEV] = dev_handle, 516 [NODES_KEY_INDEX] = index517 469 }; 518 470 hlp = hash_table_find(&nodes, key); … … 587 539 link_t *hlp; 588 540 unsigned long key[] = { 589 [NODES_KEY_ DEV] = dev_handle,590 [NODES_KEY_ INDEX] = index541 [NODES_KEY_INDEX] = index, 542 [NODES_KEY_DEV] = dev_handle 591 543 }; 592 544 hlp = hash_table_find(&nodes, key); … … 651 603 link_t *hlp; 652 604 unsigned long key[] = { 653 [NODES_KEY_ DEV] = dev_handle,654 [NODES_KEY_ INDEX] = index605 [NODES_KEY_INDEX] = index, 606 [NODES_KEY_DEV] = dev_handle 655 607 }; 656 608 hlp = hash_table_find(&nodes, key); … … 694 646 link_t *hlp; 695 647 unsigned long key[] = { 696 [NODES_KEY_ DEV] = dev_handle,697 [NODES_KEY_ INDEX] = index648 [NODES_KEY_INDEX] = index, 649 [NODES_KEY_DEV] = dev_handle 698 650 }; 699 651 hlp = hash_table_find(&nodes, key);
Note:
See TracChangeset
for help on using the changeset viewer.