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;
