Changes in / [bb0d3d24:ce8c848] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/tmpfs/tmpfs_ops.c
rbb0d3d24 rce8c848 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 … … 486 451 void tmpfs_unmounted(ipc_callid_t rid, ipc_call_t *request) 487 452 { 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); 453 ipc_answer_0(rid, ENOTSUP); 492 454 } 493 455 … … 513 475 link_t *hlp; 514 476 unsigned long key[] = { 477 [NODES_KEY_INDEX] = index, 515 478 [NODES_KEY_DEV] = dev_handle, 516 [NODES_KEY_INDEX] = index517 479 }; 518 480 hlp = hash_table_find(&nodes, key); … … 587 549 link_t *hlp; 588 550 unsigned long key[] = { 589 [NODES_KEY_ DEV] = dev_handle,590 [NODES_KEY_ INDEX] = index551 [NODES_KEY_INDEX] = index, 552 [NODES_KEY_DEV] = dev_handle 591 553 }; 592 554 hlp = hash_table_find(&nodes, key); … … 651 613 link_t *hlp; 652 614 unsigned long key[] = { 653 [NODES_KEY_ DEV] = dev_handle,654 [NODES_KEY_ INDEX] = index615 [NODES_KEY_INDEX] = index, 616 [NODES_KEY_DEV] = dev_handle 655 617 }; 656 618 hlp = hash_table_find(&nodes, key); … … 694 656 link_t *hlp; 695 657 unsigned long key[] = { 696 [NODES_KEY_ DEV] = dev_handle,697 [NODES_KEY_ INDEX] = index658 [NODES_KEY_INDEX] = index, 659 [NODES_KEY_DEV] = dev_handle 698 660 }; 699 661 hlp = hash_table_find(&nodes, key);
Note:
See TracChangeset
for help on using the changeset viewer.