]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DAFS: VnLock after VnWaitQuiescent in VAllocVnode
authorAndrew Deason <adeason@sinenomine.net>
Fri, 25 Feb 2011 22:01:32 +0000 (16:01 -0600)
committerDerrick Brashear <shadow@dementia.org>
Tue, 8 Mar 2011 12:16:15 +0000 (04:16 -0800)
In VAllocVnode, we write-lock the newly-allocated vnode. In DAFS,
however, we need to VnWaitQuiescent_r before VnLock'ing, since VnLock
in DAFS just sets the writer tid/pid. So, in VAllocVnode, move the
VnLock call to after we wait for quiescence, so we don't stomp over
the vnode when someone else has it write-locked.

Reviewed-on: http://gerrit.openafs.org/4059
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit b41575d176c2d485d55aed8780bfab9db4b7587d)

Change-Id: I6c3d68f0f5248308d0f32e9fad5c540aaf593962
Reviewed-on: http://gerrit.openafs.org/4169
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/vol/vnode.c

index c453409c320c7a52947e658820e168ed9b453d31..3687a1b2ca208b7bf8ec4f42d08431fe893163fb 100644 (file)
@@ -666,9 +666,6 @@ VAllocVnode_r(Error * ec, Volume * vp, VnodeType type)
            /* This won't block */
            VnLock(vnp, WRITE_LOCK, VOL_LOCK_HELD, WILL_NOT_DEADLOCK);
        } else {
-           /* other users present; follow locking hierarchy */
-           VnLock(vnp, WRITE_LOCK, VOL_LOCK_HELD, MIGHT_DEADLOCK);
-
 #ifdef AFS_DEMAND_ATTACH_FS
            /*
             * DAFS:
@@ -686,6 +683,9 @@ VAllocVnode_r(Error * ec, Volume * vp, VnodeType type)
            }
 #endif
 
+           /* other users present; follow locking hierarchy */
+           VnLock(vnp, WRITE_LOCK, VOL_LOCK_HELD, MIGHT_DEADLOCK);
+
            /*
             * verify state of the world hasn't changed
             *