From 3ff85264903aef41e63c5a86674ec66857db69f4 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 3 Jun 2010 15:50:46 -0400 Subject: [PATCH] darwin notify don't recurse on vcache lock afs_vop_access->afs_VerifyVCache2->afs_GetVCache->afs_FetchStatus-> afs_Analyze->afs_NotifyUser can recurse and try to notify us. Don't worry about it; we're best-effort. we lack a lock primitive to see if we own this lock. Change-Id: Ibc0c8a8164a95f0d268e5f1f42a62c3a28c4ab9d Reviewed-on: http://gerrit.openafs.org/2081 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/DARWIN/osi_misc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/afs/DARWIN/osi_misc.c b/src/afs/DARWIN/osi_misc.c index 929f4541a..adb1ef4da 100644 --- a/src/afs/DARWIN/osi_misc.c +++ b/src/afs/DARWIN/osi_misc.c @@ -79,14 +79,16 @@ loop: continue; } ReleaseReadLock(&afs_xvcache); - ObtainWriteLock(&tvc->lock, 234); - tvc->f.states |= CEvent; - AFS_GUNLOCK(); - vnode_setattr(vp, &va, afs_osi_ctxtp); - tvc->f.states &= ~CEvent; - vnode_put(vp); - AFS_GLOCK(); - ReleaseWriteLock(&tvc->lock); + /* Avoid potentially re-entering on this lock */ + if (0 == NBObtainWriteLock(&tvc->lock, 234)) { + tvc->f.states |= CEvent; + AFS_GUNLOCK(); + vnode_setattr(vp, &va, afs_osi_ctxtp); + tvc->f.states &= ~CEvent; + vnode_put(vp); + AFS_GLOCK(); + ReleaseWriteLock(&tvc->lock); + } ObtainReadLock(&afs_xvcache); /* our tvc ptr is still good until now */ AFS_FAST_RELE(tvc); -- 2.39.5