Exemplo n.º 1
0
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);
    }
}
Exemplo n.º 2
0
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);
}