From ec85304dd738935d8be3f8934b166f78a10995bf Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Sun, 29 Aug 2010 17:33:03 -0400 Subject: [PATCH] FBSD try-relax child vnode locking (recurse only) In cases where afs_vop_lookup would return a child vnode locked, continue to take an exclusive lock, but allow recursion (LK_CANRECURSE). Allow recursion also at afs_vop_link, where we specifically encountered a conflict due to recursion. Change-Id: I5f5b0979ce3c86e517f96ea60b96ebdd26401acb Reviewed-on: http://gerrit.openafs.org/2625 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/FBSD/osi_vnodeops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/afs/FBSD/osi_vnodeops.c b/src/afs/FBSD/osi_vnodeops.c index d5c16b285..cbd94d797 100644 --- a/src/afs/FBSD/osi_vnodeops.c +++ b/src/afs/FBSD/osi_vnodeops.c @@ -548,7 +548,7 @@ afs_vop_lookup(ap) MA_VOP_UNLOCK(dvp, 0, p); /* done with parent. */ #endif } - ma_vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); + ma_vn_lock(vp, LK_EXCLUSIVE | LK_CANRECURSE | LK_RETRY, p); /* always return the child locked */ } *ap->a_vpp = vp; @@ -1162,7 +1162,7 @@ afs_vop_link(ap) error = EISDIR; goto out; } - if ((error = ma_vn_lock(vp, LK_EXCLUSIVE, p)) != 0) { + if ((error = ma_vn_lock(vp, LK_CANRECURSE | LK_EXCLUSIVE, p)) != 0) { goto out; } AFS_GLOCK(); -- 2.39.5