From c16eed2cb64089bf7d958db0fe85352f4ceefb4d Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Wed, 14 May 2014 11:19:35 +0200 Subject: libdiskfs: lock-less reference counting of nodes * libdiskfs/diskfs.h (struct node): Use refcounts_t for reference counting. (diskfs_node_refcnt_lock): Remove. (diskfs_node_norefs,diskfs_drop_node): Change comments accordingly. * libdiskfs/init-init.c: Adjust accordingly. * libdiskfs/node-drop.c: Likewise. * libdiskfs/node-make.c: Likewise. * libdiskfs/node-nput.c: Likewise. * libdiskfs/node-nputl.c: Likewise. * libdiskfs/node-nref.c: Likewise. * libdiskfs/node-nrefl.c: Likewise. * libdiskfs/node-nrele.c: Likewise. * libdiskfs/node-nrelel.c: Likewise. * ext2fs/inode.c: Likewise. * fatfs/inode.c: Likewise. * isofs/inode.c: Likewise. * tmpfs/node.c: Likewise. * doc/hurd.texi: Likewise. --- libdiskfs/node-nref.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'libdiskfs/node-nref.c') diff --git a/libdiskfs/node-nref.c b/libdiskfs/node-nref.c index 13cea056..766a69c9 100644 --- a/libdiskfs/node-nref.c +++ b/libdiskfs/node-nref.c @@ -26,12 +26,9 @@ void diskfs_nref (struct node *np) { - int new_hardref; - pthread_spin_lock (&diskfs_node_refcnt_lock); - np->references++; - new_hardref = (np->references == 1); - pthread_spin_unlock (&diskfs_node_refcnt_lock); - if (new_hardref) + struct references result; + refcounts_ref (&np->refcounts, &result); + if (result.hard == 1) { pthread_mutex_lock (&np->lock); diskfs_new_hardrefs (np); -- cgit v1.2.3