Changeset 41811af in mainline for uspace/srv/vfs/vfs_node.c


Ignore:
Timestamp:
2011-06-10T10:14:26Z (14 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ab547063
Parents:
9536e6e (diff), 390d80d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline

File:
1 edited

Legend:

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

    r9536e6e r41811af  
    104104        bool free_vfs_node = false;
    105105        bool free_fs_node = false;
    106 
    107         fibril_mutex_lock(&nodes_mutex);
     106       
     107        fibril_mutex_lock(&nodes_mutex);
     108       
    108109        if (node->refcnt-- == 1) {
     110               
    109111                /*
    110112                 * We are dropping the last reference to this node.
    111113                 * Remove it from the VFS node hash table.
    112114                 */
     115               
    113116                unsigned long key[] = {
    114117                        [KEY_FS_HANDLE] = node->fs_handle,
     
    116119                        [KEY_INDEX] = node->index
    117120                };
     121               
    118122                hash_table_remove(&nodes, key, 3);
    119123                free_vfs_node = true;
     124               
    120125                if (!node->lnkcnt)
    121126                        free_fs_node = true;
    122127        }
    123         fibril_mutex_unlock(&nodes_mutex);
    124 
     128       
     129        fibril_mutex_unlock(&nodes_mutex);
     130       
    125131        if (free_fs_node) {
    126                 /*
     132               
     133                /*
    127134                 * The node is not visible in the file system namespace.
    128135                 * Free up its resources.
    129136                 */
    130                 int phone = vfs_grab_phone(node->fs_handle);
    131                 sysarg_t rc;
    132                 rc = async_req_2_0(phone, VFS_OUT_DESTROY,
    133                     (sysarg_t)node->devmap_handle, (sysarg_t)node->index);
     137               
     138                async_exch_t *exch = vfs_exchange_grab(node->fs_handle);
     139                sysarg_t rc = async_req_2_0(exch, VFS_OUT_DESTROY,
     140                    (sysarg_t) node->devmap_handle, (sysarg_t)node->index);
     141               
    134142                assert(rc == EOK);
    135                 vfs_release_phone(node->fs_handle, phone);
     143                vfs_exchange_release(exch);
    136144        }
     145       
    137146        if (free_vfs_node)
    138147                free(node);
Note: See TracChangeset for help on using the changeset viewer.