diff options
Diffstat (limited to 'tmpfs/node.c')
-rw-r--r-- | tmpfs/node.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/tmpfs/node.c b/tmpfs/node.c index 428b6d92..2a4489c2 100644 --- a/tmpfs/node.c +++ b/tmpfs/node.c @@ -40,7 +40,6 @@ static unsigned int gen; reference. */ struct node *all_nodes; static size_t all_nodes_nr_items; -/* all_nodes_lock must be acquired before diskfs_node_refcnt_lock. */ pthread_rwlock_t all_nodes_lock = PTHREAD_RWLOCK_INITIALIZER; error_t @@ -267,7 +266,7 @@ diskfs_node_iterate (error_t (*fun) (struct node *)) /* We acquire a hard reference for node, but without using diskfs_nref. We do this so that diskfs_new_hardrefs will not get called. */ - node->references++; + refcounts_ref (&node->refcounts, NULL); } pthread_rwlock_unlock (&all_nodes_lock); @@ -300,14 +299,10 @@ diskfs_try_dropping_softrefs (struct node *np) if (np->cache_id != 0) { /* Check if someone reacquired a reference. */ - unsigned int references; - pthread_spin_lock (&diskfs_node_refcnt_lock); - references = np->references; - pthread_spin_unlock (&diskfs_node_refcnt_lock); - - /* An additional reference is acquired by libdiskfs across calls - to diskfs_try_dropping_softrefs. */ - if (references > 1) + struct references result; + refcounts_references (&np->refcounts, &result); + + if (result.hard > 0) { /* A reference was reacquired. It's fine, we didn't touch anything yet. */ |