From b6367aa84b9d1c7529b6f3a12bbfeacc91384ffb Mon Sep 17 00:00:00 2001 From: Ben Kaduk Date: Fri, 29 Oct 2010 12:01:04 -0400 Subject: [PATCH] FBSD: lock interlock around v_usecount accesses The FreeBSD vnode locking strategy requires that the vnode interlock be held for all accesses to v_usecount, such as those used by our VREFCOUNT and VREFCOUNT_GT macros. Conveniently, a wrapper function is provided that takes the lock around its access of the element, vrefcnt(). Use it for our macros. Change-Id: Ia88eb21046fe844a6adb830734dcae2f76ef2dc5 Reviewed-on: http://gerrit.openafs.org/3195 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/afs/afs.h b/src/afs/afs.h index 1ee9ab533..5c2c832e1 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -670,6 +670,9 @@ struct SimpleLocks { #if defined(AFS_DARWIN80_ENV) #define VREFCOUNT_GT(v, y) vnode_isinuse(AFSTOV(v), (y)) +#elif defined(AFS_FBSD_ENV) +#define VREFCOUNT(v) (vrefcnt(AFSTOV(v))) +#define VREFCOUNT_GT(v, y) (vrefcnt(AFSTOV(v)) > y) #elif defined(AFS_XBSD_ENV) || defined(AFS_DARWIN_ENV) #define VREFCOUNT(v) ((v)->vrefCount) #define VREFCOUNT_GT(v, y) (AFSTOV(v)->v_usecount > (y)) -- 2.39.5