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;