Index: vfs_lookup.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_lookup.c,v retrieving revision 1.101 diff -u -p -r1.101 vfs_lookup.c --- vfs_lookup.c 27 May 2007 20:50:23 -0000 1.101 +++ vfs_lookup.c 6 Jun 2007 18:58:07 -0000 @@ -495,6 +495,11 @@ dirloop: if (!(cnp->cn_flags & (LOCKPARENT | LOCKLEAF))) VOP_UNLOCK(dp, 0, td); + else if ((cnp->cn_flags & (ISLASTCN|LOCKSHARED|LOCKLEAF)) == + (ISLASTCN|LOCKLEAF)) { + if (VOP_ISLOCKED(dp, td) != LK_EXCLUSIVE) + vn_lock(dp, LK_UPGRADE | LK_RETRY, td); + } /* XXX This should probably move to the top of function. */ if (cnp->cn_flags & SAVESTART) panic("lookup: SAVESTART");