Index: xfs_vnodeops-common.c =================================================================== RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/bsd/xfs_vnodeops-common.c,v retrieving revision 1.65 diff -u -w -u -w -r1.65 xfs_vnodeops-common.c --- xfs_vnodeops-common.c 2000/10/18 01:53:29 1.65 +++ xfs_vnodeops-common.c 2000/10/29 02:32:32 @@ -531,19 +534,11 @@ error = xfs_dnlc_lookup(dvp, cnp, vpp); if (error == 0) { + int lock_error; - /* - * Doesn't quite work. - */ + xfs_vfs_unlock(dvp, proc); + cnp->cn_flags |= PDIRUNLOCK; -#if 0 - if ((cnp->cn_nameiop == CREATE || cnp->cn_nameiop == RENAME) - && (cnp->cn_flags & ISLASTCN)) { - error = EJUSTRETURN; - goto done; - } -#endif - msg.header.opcode = XFS_MSG_GETNODE; if (cnp->cn_cred != NOCRED) { msg.cred.uid = cnp->cn_cred->cr_uid; @@ -565,6 +560,12 @@ cnp->cn_nameptr, cnp->cn_namelen)); xfs_dnlc_enter (dvp, cnp, NULL); } + + lock_error = xfs_do_vget(dvp, LK_EXCLUSIVE, p); + if (lock_error == 0) + cnp->cn_flags &= ~PDIRUNLOCK; + else + error = lock_error; } else if (error == -1) { error = 0; goto done;