Module Name:    src
Committed By:   nakayama
Date:           Thu Nov 29 11:58:49 UTC 2012

Modified Files:
        src/sys/fs/smbfs: smbfs_node.c smbfs_vnops.c

Log Message:
- Remove redundant vput() before vgone().
- Avoid unnecessary mutex_exit() in smbfs_node_alloc().
- Set NGONE bit to from-name vnode to invalidate the smbnode cache.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.83 -r1.84 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.48 src/sys/fs/smbfs/smbfs_node.c:1.49
--- src/sys/fs/smbfs/smbfs_node.c:1.48	Wed Nov 28 13:34:24 2012
+++ src/sys/fs/smbfs/smbfs_node.c	Thu Nov 29 11:58:49 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.49 2012/11/29 11:58:49 nakayama Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.49 2012/11/29 11:58:49 nakayama Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -150,15 +150,16 @@ retry:
 		 */
 		if ((vp->v_type == VDIR && (np->n_dosattr & SMB_FA_DIR) == 0) ||
 		    (vp->v_type == VREG && (np->n_dosattr & SMB_FA_DIR) != 0)) {
-			vput(vp);
+			VOP_UNLOCK(vp);
 			vgone(vp);
-			break;
+			goto allocnew;
 		}
 		*vpp = vp;
 		return (0);
 	}
 	mutex_exit(&smp->sm_hashlock);
 
+allocnew:
 	/*
 	 * If we don't have node attributes, then it is an explicit lookup
 	 * for an existing vnode.

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.83 src/sys/fs/smbfs/smbfs_vnops.c:1.84
--- src/sys/fs/smbfs/smbfs_vnops.c:1.83	Wed Nov 28 13:34:24 2012
+++ src/sys/fs/smbfs/smbfs_vnops.c	Thu Nov 29 11:58:49 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.84 2012/11/29 11:58:49 nakayama Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.84 2012/11/29 11:58:49 nakayama Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -725,6 +725,7 @@ smbfs_rename(void *v)
 		}
 		error = smbfs_smb_rename(VTOSMB(fvp), VTOSMB(tdvp),
 		    tcnp->cn_nameptr, tcnp->cn_namelen, &scred);
+		VTOSMB(fvp)->n_flag |= NGONE;
 		VN_KNOTE(fdvp, NOTE_WRITE);
 		VN_KNOTE(fvp, NOTE_RENAME);
 	}
@@ -1270,9 +1271,11 @@ smbfs_lookup(void *v)
 
 		cache_purge(newvp);
 		if (newvp != dvp) {
-			vput(newvp);
-			if (killit)
+			if (killit) {
+				VOP_UNLOCK(newvp);
 				vgone(newvp);
+			} else
+				vput(newvp);
 		} else
 			vrele(newvp);
 		*vpp = NULLVP;

Reply via email to