Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Vnode API cleanup pass 1.
details: https://anonhg.NetBSD.org/src/rev/ca113b7becc3
branches: trunk
changeset: 790980:ca113b7becc3
user: hannken <hannken%NetBSD.org@localhost>
date: Tue Oct 29 09:53:51 2013 +0000
description:
Vnode API cleanup pass 1.
- Make these defines and functions private to vfs_vnode.c:
VC_MASK, VC_LOCK, DOCLOSE, VI_IANCTREDO and VI_INACTNOW
vclean() and vrelel()
- Remove the long time unused lwp argument from vrecycle().
- Remove vtryget(), it is responsible for ugly hacks and doesn't
look that effective.
Presented on tech-kern.
Welcome to 6.99.25
diffstat:
external/cddl/osnet/sys/sys/vnode.h | 3 +-
share/man/man9/vnode.9 | 8 +-
sys/kern/uipc_usrreq.c | 7 +-
sys/kern/vfs_cache.c | 91 +++++++++++++++---------------------
sys/kern/vfs_mount.c | 42 ++++------------
sys/kern/vfs_vnode.c | 70 +++++++++++++--------------
sys/miscfs/procfs/procfs_subr.c | 21 ++++----
sys/sys/param.h | 4 +-
sys/sys/vnode.h | 16 +----
sys/ufs/ext2fs/ext2fs_vfsops.c | 6 +-
sys/ufs/ffs/ffs_vfsops.c | 6 +-
sys/ufs/lfs/lfs_segment.c | 15 ++---
sys/ufs/lfs/lfs_syscalls.c | 8 +-
13 files changed, 125 insertions(+), 172 deletions(-)
diffs (truncated from 687 to 300 lines):
diff -r 1c3221ad53a9 -r ca113b7becc3 external/cddl/osnet/sys/sys/vnode.h
--- a/external/cddl/osnet/sys/sys/vnode.h Tue Oct 29 09:40:43 2013 +0000
+++ b/external/cddl/osnet/sys/sys/vnode.h Tue Oct 29 09:53:51 2013 +0000
@@ -1,5 +1,5 @@
-/* $NetBSD: vnode.h,v 1.11 2013/09/23 20:44:24 christos Exp $ */
+/* $NetBSD: vnode.h,v 1.12 2013/10/29 09:53:51 hannken Exp $ */
/*
* CDDL HEADER START
@@ -686,7 +686,6 @@
#define VN_RELE_ASYNC(vp, taskq) vrele_async((vp))
#define vn_exists(a) do { } while(0)
-#define vn_reinit(a) vclean((a), 0)
/*
* Flags for VOP_LOOKUP
diff -r 1c3221ad53a9 -r ca113b7becc3 share/man/man9/vnode.9
--- a/share/man/man9/vnode.9 Tue Oct 29 09:40:43 2013 +0000
+++ b/share/man/man9/vnode.9 Tue Oct 29 09:53:51 2013 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: vnode.9,v 1.56 2012/02/08 09:32:47 wiz Exp $
+.\" $NetBSD: vnode.9,v 1.57 2013/10/29 09:53:51 hannken Exp $
.\"
.\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -27,7 +27,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd February 8, 2012
+.Dd October 29, 2013
.Dt VNODE 9
.Os
.Sh NAME
@@ -79,7 +79,7 @@
.Ft void
.Fn ungetnewvnode "struct vnode *vp"
.Ft int
-.Fn vrecycle "struct vnode *vp" "struct simplelock *inter_lkp" "struct lwp *l"
+.Fn vrecycle "struct vnode *vp" "struct simplelock *inter_lkp"
.Ft void
.Fn vgone "struct vnode *vp"
.Ft void
@@ -617,7 +617,7 @@
.Xr VFS_VGET 9
which may need to push back a vnode in case of a locking race
condition.
-.It Fn vrecycle "vp" "inter_lkp" "l"
+.It Fn vrecycle "vp" "inter_lkp"
Recycle the unused vnode
.Fa vp
to the front of the freelist.
diff -r 1c3221ad53a9 -r ca113b7becc3 sys/kern/uipc_usrreq.c
--- a/sys/kern/uipc_usrreq.c Tue Oct 29 09:40:43 2013 +0000
+++ b/sys/kern/uipc_usrreq.c Tue Oct 29 09:53:51 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_usrreq.c,v 1.147 2013/10/25 19:55:22 martin Exp $ */
+/* $NetBSD: uipc_usrreq.c,v 1.148 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1998, 2000, 2004, 2008, 2009 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.147 2013/10/25 19:55:22 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.148 2013/10/29 09:53:51 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -851,7 +851,8 @@
/* XXXAD racy */
mutex_enter(vp->v_interlock);
vp->v_socket = NULL;
- vrelel(vp, 0);
+ mutex_exit(vp->v_interlock);
+ vrele(vp);
solock(so);
unp->unp_vnode = NULL;
}
diff -r 1c3221ad53a9 -r ca113b7becc3 sys/kern/vfs_cache.c
--- a/sys/kern/vfs_cache.c Tue Oct 29 09:40:43 2013 +0000
+++ b/sys/kern/vfs_cache.c Tue Oct 29 09:53:51 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_cache.c,v 1.91 2012/11/05 17:27:39 dholland Exp $ */
+/* $NetBSD: vfs_cache.c,v 1.92 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.91 2012/11/05 17:27:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.92 2013/10/29 09:53:51 hannken Exp $");
#include "opt_ddb.h"
#include "opt_revcache.h"
@@ -442,24 +442,19 @@
}
vp = ncp->nc_vp;
- if (vtryget(vp)) {
- mutex_exit(&ncp->nc_lock);
- mutex_exit(&cpup->cpu_lock);
- } else {
- mutex_enter(vp->v_interlock);
- mutex_exit(&ncp->nc_lock);
- mutex_exit(&cpup->cpu_lock);
- error = vget(vp, LK_NOWAIT);
- if (error) {
- KASSERT(error == EBUSY);
- /*
- * This vnode is being cleaned out.
- * XXX badhits?
- */
- COUNT(cpup->cpu_stats, ncs_falsehits);
- /* found nothing */
- return 0;
- }
+ mutex_enter(vp->v_interlock);
+ mutex_exit(&ncp->nc_lock);
+ mutex_exit(&cpup->cpu_lock);
+ error = vget(vp, LK_NOWAIT);
+ if (error) {
+ KASSERT(error == EBUSY);
+ /*
+ * This vnode is being cleaned out.
+ * XXX badhits?
+ */
+ COUNT(cpup->cpu_stats, ncs_falsehits);
+ /* found nothing */
+ return 0;
}
#ifdef DEBUG
@@ -552,24 +547,19 @@
/* found negative entry; vn is already null from above */
return 1;
}
- if (vtryget(vp)) {
- mutex_exit(&ncp->nc_lock);
- mutex_exit(&cpup->cpu_lock);
- } else {
- mutex_enter(vp->v_interlock);
- mutex_exit(&ncp->nc_lock);
- mutex_exit(&cpup->cpu_lock);
- error = vget(vp, LK_NOWAIT);
- if (error) {
- KASSERT(error == EBUSY);
- /*
- * This vnode is being cleaned out.
- * XXX badhits?
- */
- COUNT(cpup->cpu_stats, ncs_falsehits);
- /* found nothing */
- return 0;
- }
+ mutex_enter(vp->v_interlock);
+ mutex_exit(&ncp->nc_lock);
+ mutex_exit(&cpup->cpu_lock);
+ error = vget(vp, LK_NOWAIT);
+ if (error) {
+ KASSERT(error == EBUSY);
+ /*
+ * This vnode is being cleaned out.
+ * XXX badhits?
+ */
+ COUNT(cpup->cpu_stats, ncs_falsehits);
+ /* found nothing */
+ return 0;
}
/* Unlocked, but only for stats. */
@@ -639,21 +629,16 @@
*bpp = bp;
}
- if (vtryget(dvp)) {
- mutex_exit(&ncp->nc_lock);
- mutex_exit(namecache_lock);
- } else {
- mutex_enter(dvp->v_interlock);
- mutex_exit(&ncp->nc_lock);
- mutex_exit(namecache_lock);
- error = vget(dvp, LK_NOWAIT);
- if (error) {
- KASSERT(error == EBUSY);
- if (bufp)
- (*bpp) += nlen;
- *dvpp = NULL;
- return -1;
- }
+ mutex_enter(dvp->v_interlock);
+ mutex_exit(&ncp->nc_lock);
+ mutex_exit(namecache_lock);
+ error = vget(dvp, LK_NOWAIT);
+ if (error) {
+ KASSERT(error == EBUSY);
+ if (bufp)
+ (*bpp) += nlen;
+ *dvpp = NULL;
+ return -1;
}
*dvpp = dvp;
return (0);
diff -r 1c3221ad53a9 -r ca113b7becc3 sys/kern/vfs_mount.c
--- a/sys/kern/vfs_mount.c Tue Oct 29 09:40:43 2013 +0000
+++ b/sys/kern/vfs_mount.c Tue Oct 29 09:53:51 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_mount.c,v 1.22 2013/10/25 20:37:17 martin Exp $ */
+/* $NetBSD: vfs_mount.c,v 1.23 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.22 2013/10/25 20:37:17 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.23 2013/10/29 09:53:51 hannken Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -465,6 +465,13 @@
*/
if (vp == skipvp)
continue;
+ /*
+ * First try to recycle the vnode.
+ */
+ if (vrecycle(vp, &mntvnode_lock)) {
+ mutex_enter(&mntvnode_lock);
+ continue;
+ }
mutex_enter(vp->v_interlock);
/*
* Ignore clean but still referenced vnodes.
@@ -490,19 +497,6 @@
continue;
}
/*
- * With v_usecount == 0, all we need to do is clear
- * out the vnode data structures and we are done.
- */
- if (vp->v_usecount == 0) {
- mutex_exit(&mntvnode_lock);
- vremfree(vp);
- vp->v_usecount = 1;
- vclean(vp, DOCLOSE);
- vrelel(vp, 0);
- mutex_enter(&mntvnode_lock);
- continue;
- }
- /*
* If FORCECLOSE is set, forcibly close the vnode.
* For block or character devices, revert to an
* anonymous device. For all other files, just
@@ -510,22 +504,8 @@
*/
if (flags & FORCECLOSE) {
mutex_exit(&mntvnode_lock);
- atomic_inc_uint(&vp->v_usecount);
- if (vp->v_type != VBLK && vp->v_type != VCHR) {
- vclean(vp, DOCLOSE);
- vrelel(vp, 0);
- } else {
- vclean(vp, 0);
- vp->v_op = spec_vnodeop_p; /* XXXSMP */
- mutex_exit(vp->v_interlock);
- /*
- * The vnode isn't clean, but still resides
- * on the mount list. Remove it. XXX This
- * is a bit dodgy.
- */
- vfs_insmntque(vp, NULL);
- vrele(vp);
- }
+ if (vget(vp, 0) == 0)
+ vgone(vp);
mutex_enter(&mntvnode_lock);
continue;
}
diff -r 1c3221ad53a9 -r ca113b7becc3 sys/kern/vfs_vnode.c
--- a/sys/kern/vfs_vnode.c Tue Oct 29 09:40:43 2013 +0000
+++ b/sys/kern/vfs_vnode.c Tue Oct 29 09:53:51 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_vnode.c,v 1.22 2013/10/25 20:39:40 martin Exp $ */
+/* $NetBSD: vfs_vnode.c,v 1.23 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -126,7 +126,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.22 2013/10/25 20:39:40 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.23 2013/10/29 09:53:51 hannken Exp $");
Home |
Main Index |
Thread Index |
Old Index