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: I594f31ba05c3847e5d83d89748266d24547bf97b
Reviewed-on: http://gerrit.openafs.org/3035
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-on: http://gerrit.openafs.org/3632
Tested-by: Derrick Brashear <shadow@dementia.org>
* 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))) {