void netfs_nput (struct node *np) { spin_lock (&netfs_node_refcnt_lock); assert (np->references); np->references--; if (np->references == 0) netfs_drop_node (np); /* netfs_drop_node drops netfs_node_refcnt_lock for us. */ else { spin_unlock (&netfs_node_refcnt_lock); mutex_unlock (&np->lock); } }
void netfs_nput (struct node *np) { struct references result; refcounts_demote (&np->refcounts, &result); if (result.hard == 0) netfs_try_dropping_softrefs (np); refcounts_deref_weak (&np->refcounts, &result); if (result.hard == 0 && result.weak == 0) netfs_drop_node (np); else pthread_mutex_unlock (&np->lock); }