]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
FBSD: band-aid vnode locking in lookup
authorBen Kaduk <kaduk@mit.edu>
Sun, 24 Oct 2010 04:29:07 +0000 (00:29 -0400)
committerDerrick Brashear <shadow@dementia.org>
Tue, 26 Oct 2010 04:41:00 +0000 (21:41 -0700)
The lock order requires that we acquire vnode locks from the root
towards the leaf.  When looking up "..", this requires that we
unlock the directory before locking the child, otherwise we
are susceptible to deadlock.
This is only a band-aid, as afs_vop_lookup should be rewritten.

Change-Id: Ie99a677978370488f8edc7128014b89abc00a56c
Reviewed-on: http://gerrit.openafs.org/3035
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/afs/FBSD/osi_vnodeops.c

index cbd94d797ebcc64a6187074481ee452dd44c673d..52156426253bce2b24713c9b7a31f514958be27e 100644 (file)
@@ -531,7 +531,9 @@ afs_vop_lookup(ap)
      * we also always return the vnode locked. */
 
     if (flags & ISDOTDOT) {
+       MA_VOP_UNLOCK(dvp, 0, p);
        ma_vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+       ma_vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, p);
        /* always return the child locked */
        if (lockparent && (flags & ISLASTCN)
            && (error = ma_vn_lock(dvp, LK_EXCLUSIVE, p))) {