Module Name: src
Committed By: hannken
Date: Tue Oct 29 09:53:51 UTC 2013
Modified Files:
src/external/cddl/osnet/sys/sys: vnode.h
src/share/man/man9: vnode.9
src/sys/kern: uipc_usrreq.c vfs_cache.c vfs_mount.c vfs_vnode.c
src/sys/miscfs/procfs: procfs_subr.c
src/sys/sys: param.h vnode.h
src/sys/ufs/ext2fs: ext2fs_vfsops.c
src/sys/ufs/ffs: ffs_vfsops.c
src/sys/ufs/lfs: lfs_segment.c lfs_syscalls.c
Log Message:
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
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/external/cddl/osnet/sys/sys/vnode.h
cvs rdiff -u -r1.56 -r1.57 src/share/man/man9/vnode.9
cvs rdiff -u -r1.147 -r1.148 src/sys/kern/uipc_usrreq.c
cvs rdiff -u -r1.91 -r1.92 src/sys/kern/vfs_cache.c
cvs rdiff -u -r1.22 -r1.23 src/sys/kern/vfs_mount.c src/sys/kern/vfs_vnode.c
cvs rdiff -u -r1.102 -r1.103 src/sys/miscfs/procfs/procfs_subr.c
cvs rdiff -u -r1.433 -r1.434 src/sys/sys/param.h
cvs rdiff -u -r1.238 -r1.239 src/sys/sys/vnode.h
cvs rdiff -u -r1.173 -r1.174 src/sys/ufs/ext2fs/ext2fs_vfsops.c
cvs rdiff -u -r1.289 -r1.290 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.232 -r1.233 src/sys/ufs/lfs/lfs_segment.c
cvs rdiff -u -r1.149 -r1.150 src/sys/ufs/lfs/lfs_syscalls.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/cddl/osnet/sys/sys/vnode.h
diff -u src/external/cddl/osnet/sys/sys/vnode.h:1.11 src/external/cddl/osnet/sys/sys/vnode.h:1.12
--- src/external/cddl/osnet/sys/sys/vnode.h:1.11 Mon Sep 23 20:44:24 2013
+++ src/external/cddl/osnet/sys/sys/vnode.h Tue Oct 29 09:53:51 2013
@@ -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 @@ vn_remove(char *fnamep, enum uio_seg seg
#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
Index: src/share/man/man9/vnode.9
diff -u src/share/man/man9/vnode.9:1.56 src/share/man/man9/vnode.9:1.57
--- src/share/man/man9/vnode.9:1.56 Wed Feb 8 09:32:47 2012
+++ src/share/man/man9/vnode.9 Tue Oct 29 09:53:51 2013
@@ -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 @@ This function is needed for
.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.
Index: src/sys/kern/uipc_usrreq.c
diff -u src/sys/kern/uipc_usrreq.c:1.147 src/sys/kern/uipc_usrreq.c:1.148
--- src/sys/kern/uipc_usrreq.c:1.147 Fri Oct 25 19:55:22 2013
+++ src/sys/kern/uipc_usrreq.c Tue Oct 29 09:53:51 2013
@@ -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 @@ unp_detach(struct unpcb *unp)
/* 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;
}
Index: src/sys/kern/vfs_cache.c
diff -u src/sys/kern/vfs_cache.c:1.91 src/sys/kern/vfs_cache.c:1.92
--- src/sys/kern/vfs_cache.c:1.91 Mon Nov 5 17:27:39 2012
+++ src/sys/kern/vfs_cache.c Tue Oct 29 09:53:51 2013
@@ -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 @@ cache_lookup(struct vnode *dvp, const ch
}
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 @@ cache_lookup_raw(struct vnode *dvp, cons
/* 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 @@ cache_revlookup(struct vnode *vp, struct
*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);
Index: src/sys/kern/vfs_mount.c
diff -u src/sys/kern/vfs_mount.c:1.22 src/sys/kern/vfs_mount.c:1.23
--- src/sys/kern/vfs_mount.c:1.22 Fri Oct 25 20:37:17 2013
+++ src/sys/kern/vfs_mount.c Tue Oct 29 09:53:51 2013
@@ -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 @@ vflush(struct mount *mp, vnode_t *skipvp
*/
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 @@ vflush(struct mount *mp, vnode_t *skipvp
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 @@ vflush(struct mount *mp, vnode_t *skipvp
*/
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;
}
Index: src/sys/kern/vfs_vnode.c
diff -u src/sys/kern/vfs_vnode.c:1.22 src/sys/kern/vfs_vnode.c:1.23
--- src/sys/kern/vfs_vnode.c:1.22 Fri Oct 25 20:39:40 2013
+++ src/sys/kern/vfs_vnode.c Tue Oct 29 09:53:51 2013
@@ -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 $");
+
+#define _VFS_VNODE_PRIVATE
#include <sys/param.h>
#include <sys/kernel.h>
@@ -150,6 +152,15 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,
#include <uvm/uvm.h>
#include <uvm/uvm_readahead.h>
+/* v_usecount; see the comment near the top of vfs_vnode.c */
+#define VC_XLOCK 0x80000000
+#define VC_MASK 0x7fffffff
+
+#define DOCLOSE 0x0008 /* vclean: close active files */
+
+/* Flags to vrelel. */
+#define VRELEL_ASYNC_RELE 0x0001 /* Always defer to vrele thread. */
+
u_int numvnodes __cacheline_aligned;
static pool_cache_t vnode_cache __read_mostly;
@@ -172,6 +183,7 @@ static int vrele_pending __cacheline_a
static int vrele_gen __cacheline_aligned;
static int cleanvnode(void);
+static void vrelel(vnode_t *, int);
static void vdrain_thread(void *);
static void vrele_thread(void *);
static void vnpanic(vnode_t *, const char *, ...)
@@ -490,36 +502,6 @@ vremfree(vnode_t *vp)
}
/*
- * Try to gain a reference to a vnode, without acquiring its interlock.
- * The caller must hold a lock that will prevent the vnode from being
- * recycled or freed.
- */
-bool
-vtryget(vnode_t *vp)
-{
- u_int use, next;
-
- /*
- * If the vnode is being freed, don't make life any harder
- * for vclean() by adding another reference without waiting.
- * This is not strictly necessary, but we'll do it anyway.
- */
- if (__predict_false((vp->v_iflag & VI_XLOCK) != 0)) {
- return false;
- }
- for (use = vp->v_usecount;; use = next) {
- if (use == 0 || __predict_false((use & VC_XLOCK) != 0)) {
- /* Need interlock held if first reference. */
- return false;
- }
- next = atomic_cas_uint(&vp->v_usecount, use, use + 1);
- if (__predict_true(next == use)) {
- return true;
- }
- }
-}
-
-/*
* vget: get a particular vnode from the free list, increment its reference
* count and lock it.
*
@@ -634,7 +616,7 @@ vtryrele(vnode_t *vp)
* Vnode release. If reference count drops to zero, call inactive
* routine and either return to freelist or free to the pool.
*/
-void
+static void
vrelel(vnode_t *vp, int flags)
{
bool recycle, defer;
@@ -980,7 +962,7 @@ void
vclean(vnode_t *vp, int flags)
{
lwp_t *l = curlwp;
- bool recycle, active;
+ bool recycle, active, make_anon;
int error;
KASSERT(mutex_owned(vp->v_interlock));
@@ -1014,6 +996,11 @@ vclean(vnode_t *vp, int flags)
mutex_exit(vp->v_interlock);
VOP_LOCK(vp, LK_EXCLUSIVE);
+ make_anon = (active && vp->v_type == VBLK &&
+ spec_node_getmountedfs(vp) != NULL);
+ if (make_anon)
+ flags &= ~DOCLOSE;
+
/*
* Clean out any cached data associated with the vnode.
* If purging an active vnode, it must be closed and
@@ -1061,9 +1048,20 @@ vclean(vnode_t *vp, int flags)
/* Purge name cache. */
cache_purge(vp);
+ /*
+ * The vnode isn't clean, but still resides on the mount list. Remove
+ * it. XXX This is a bit dodgy.
+ */
+ if (make_anon)
+ vfs_insmntque(vp, NULL);
+
/* Done with purge, notify sleepers of the grim news. */
mutex_enter(vp->v_interlock);
- vp->v_op = dead_vnodeop_p;
+ if (make_anon) {
+ vp->v_op = spec_vnodeop_p;
+ } else {
+ vp->v_op = dead_vnodeop_p;
+ }
vp->v_tag = VT_NON;
KNOTE(&vp->v_klist, NOTE_REVOKE);
vp->v_iflag &= ~VI_XLOCK;
@@ -1081,7 +1079,7 @@ vclean(vnode_t *vp, int flags)
* Release the passed interlock if the vnode will be recycled.
*/
int
-vrecycle(vnode_t *vp, kmutex_t *inter_lkp, struct lwp *l)
+vrecycle(vnode_t *vp, kmutex_t *inter_lkp)
{
KASSERT((vp->v_iflag & VI_MARKER) == 0);
Index: src/sys/miscfs/procfs/procfs_subr.c
diff -u src/sys/miscfs/procfs/procfs_subr.c:1.102 src/sys/miscfs/procfs/procfs_subr.c:1.103
--- src/sys/miscfs/procfs/procfs_subr.c:1.102 Sun Nov 25 01:03:05 2012
+++ src/sys/miscfs/procfs/procfs_subr.c Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs_subr.c,v 1.102 2012/11/25 01:03:05 christos Exp $ */
+/* $NetBSD: procfs_subr.c,v 1.103 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -102,7 +102,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_subr.c,v 1.102 2012/11/25 01:03:05 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_subr.c,v 1.103 2013/10/29 09:53:51 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -671,18 +671,17 @@ procfs_revoke_vnodes(struct proc *p, voi
for (pfs = LIST_FIRST(ppp); pfs; pfs = pnext) {
vp = PFSTOV(pfs);
pnext = LIST_NEXT(pfs, pfs_hash);
+ if (pfs->pfs_pid != p->p_pid || vp->v_mount != mp)
+ continue;
mutex_enter(vp->v_interlock);
- if (vp->v_usecount > 0 && pfs->pfs_pid == p->p_pid &&
- vp->v_mount == mp) {
- vp->v_usecount++;
- mutex_exit(vp->v_interlock);
- mutex_exit(&pfs_ihash_lock);
- VOP_REVOKE(vp, REVOKEALL);
- vrele(vp);
+ mutex_exit(&pfs_ihash_lock);
+ if (vget(vp, 0) != 0) {
mutex_enter(&pfs_ihash_lock);
- } else {
- mutex_exit(vp->v_interlock);
+ continue;
}
+ VOP_REVOKE(vp, REVOKEALL);
+ vrele(vp);
+ mutex_enter(&pfs_ihash_lock);
}
mutex_exit(&pfs_ihash_lock);
}
Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.433 src/sys/sys/param.h:1.434
--- src/sys/sys/param.h:1.433 Mon Sep 30 18:58:00 2013
+++ src/sys/sys/param.h Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.433 2013/09/30 18:58:00 hannken Exp $ */
+/* $NetBSD: param.h,v 1.434 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
* 2.99.9 (299000900)
*/
-#define __NetBSD_Version__ 699002400 /* NetBSD 6.99.24 */
+#define __NetBSD_Version__ 699002500 /* NetBSD 6.99.25 */
#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
(m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
Index: src/sys/sys/vnode.h
diff -u src/sys/sys/vnode.h:1.238 src/sys/sys/vnode.h:1.239
--- src/sys/sys/vnode.h:1.238 Mon Sep 30 15:24:14 2013
+++ src/sys/sys/vnode.h Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: vnode.h,v 1.238 2013/09/30 15:24:14 hannken Exp $ */
+/* $NetBSD: vnode.h,v 1.239 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -205,8 +205,10 @@ typedef struct vnode vnode_t;
#define VI_LAYER 0x00020000 /* vnode is on a layer filesystem */
#define VI_LOCKSHARE 0x00040000 /* v_interlock is shared */
#define VI_CLEAN 0x00080000 /* has been reclaimed */
+#ifdef _VFS_VNODE_PRIVATE
#define VI_INACTREDO 0x00200000 /* need to redo VOP_INACTIVE() */
#define VI_INACTNOW 0x00800000 /* VOP_INACTIVE() in progress */
+#endif /* _VFS_VNODE_PRIVATE */
/*
* The third set are locked by the underlying file system.
@@ -222,12 +224,6 @@ typedef struct vnode vnode_t;
#define VSIZENOTSET ((voff_t)-1)
/*
- * v_usecount; see the comment near the top of vfs_vnode.c
- */
-#define VC_XLOCK 0x80000000
-#define VC_MASK 0x7fffffff
-
-/*
* vnode lock flags
*/
#define LK_SHARED 0x00000001 /* shared lock */
@@ -318,7 +314,6 @@ extern const int vttoif_tab[];
#define SKIPSYSTEM 0x0001 /* vflush: skip vnodes marked VSYSTEM */
#define FORCECLOSE 0x0002 /* vflush: force file closeure */
#define WRITECLOSE 0x0004 /* vflush: only close writable files */
-#define DOCLOSE 0x0008 /* vclean: close active files */
#define V_SAVE 0x0001 /* vinvalbuf: sync file first */
/*
@@ -548,12 +543,11 @@ int vfinddev(dev_t, enum vtype, struct v
int vflush(struct mount *, struct vnode *, int);
int vflushbuf(struct vnode *, int);
int vget(struct vnode *, int);
-bool vtryget(struct vnode *);
void vgone(struct vnode *);
int vinvalbuf(struct vnode *, int, kauth_cred_t, struct lwp *, bool, int);
void vprint(const char *, struct vnode *);
void vput(struct vnode *);
-int vrecycle(struct vnode *, kmutex_t *, struct lwp *);
+int vrecycle(struct vnode *, kmutex_t *);
void vrele(struct vnode *);
void vrele_async(struct vnode *);
void vrele_flush(void);
@@ -562,8 +556,6 @@ void vwakeup(struct buf *);
void vwait(struct vnode *, int);
void vclean(struct vnode *, int);
void vrevoke(struct vnode *);
-void vrelel(struct vnode *, int);
-#define VRELEL_ASYNC_RELE 0x03
struct vnode *
vnalloc(struct mount *);
void vnfree(struct vnode *);
Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.173 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.174
--- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.173 Mon Sep 30 18:58:00 2013
+++ src/sys/ufs/ext2fs/ext2fs_vfsops.c Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_vfsops.c,v 1.173 2013/09/30 18:58:00 hannken Exp $ */
+/* $NetBSD: ext2fs_vfsops.c,v 1.174 2013/10/29 09:53:51 hannken Exp $ */
/*
* Copyright (c) 1989, 1991, 1993, 1994
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.173 2013/09/30 18:58:00 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.174 2013/10/29 09:53:51 hannken Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -607,7 +607,7 @@ loop:
/*
* Step 4: invalidate all inactive vnodes.
*/
- if (vrecycle(vp, &mntvnode_lock, l)) {
+ if (vrecycle(vp, &mntvnode_lock)) {
mutex_enter(&mntvnode_lock);
(void)vunmark(mvp);
goto loop;
Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.289 src/sys/ufs/ffs/ffs_vfsops.c:1.290
--- src/sys/ufs/ffs/ffs_vfsops.c:1.289 Mon Sep 30 18:58:00 2013
+++ src/sys/ufs/ffs/ffs_vfsops.c Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_vfsops.c,v 1.289 2013/09/30 18:58:00 hannken Exp $ */
+/* $NetBSD: ffs_vfsops.c,v 1.290 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.289 2013/09/30 18:58:00 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.290 2013/10/29 09:53:51 hannken Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -827,7 +827,7 @@ ffs_reload(struct mount *mp, kauth_cred_
/*
* Step 4: invalidate all inactive vnodes.
*/
- if (vrecycle(vp, &mntvnode_lock, l)) {
+ if (vrecycle(vp, &mntvnode_lock)) {
mutex_enter(&mntvnode_lock);
(void)vunmark(mvp);
goto loop;
Index: src/sys/ufs/lfs/lfs_segment.c
diff -u src/sys/ufs/lfs/lfs_segment.c:1.232 src/sys/ufs/lfs/lfs_segment.c:1.233
--- src/sys/ufs/lfs/lfs_segment.c:1.232 Thu Oct 17 21:01:08 2013
+++ src/sys/ufs/lfs/lfs_segment.c Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_segment.c,v 1.232 2013/10/17 21:01:08 christos Exp $ */
+/* $NetBSD: lfs_segment.c,v 1.233 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.232 2013/10/17 21:01:08 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.233 2013/10/29 09:53:51 hannken Exp $");
#ifdef DEBUG
# define vndebug(vp, str) do { \
@@ -2801,9 +2801,8 @@ lfs_vunref(struct vnode *vp)
return;
}
- /* does not call inactive */
- mutex_enter(vp->v_interlock);
- vrelel(vp, 0);
+ /* does not call inactive XXX sure it does XXX */
+ vrele(vp);
}
/*
@@ -2820,9 +2819,9 @@ lfs_vunref_head(struct vnode *vp)
ASSERT_SEGLOCK(VTOI(vp)->i_lfs);
- /* does not call inactive, inserts non-held vnode at head of freelist */
- mutex_enter(vp->v_interlock);
- vrelel(vp, 0);
+ /* does not call inactive XXX sure it does XXX,
+ inserts non-held vnode at head of freelist */
+ vrele(vp);
}
Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.149 src/sys/ufs/lfs/lfs_syscalls.c:1.150
--- src/sys/ufs/lfs/lfs_syscalls.c:1.149 Mon Oct 7 05:19:23 2013
+++ src/sys/ufs/lfs/lfs_syscalls.c Tue Oct 29 09:53:51 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_syscalls.c,v 1.149 2013/10/07 05:19:23 dholland Exp $ */
+/* $NetBSD: lfs_syscalls.c,v 1.150 2013/10/29 09:53:51 hannken Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007, 2008
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.149 2013/10/07 05:19:23 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.150 2013/10/29 09:53:51 hannken Exp $");
#ifndef LFS
# define LFS /* for prototypes in syscallargs.h */
@@ -713,7 +713,7 @@ lfs_bmapv(struct proc *p, fsid_t *fsidp,
if (v_daddr != LFS_UNUSED_DADDR) {
lfs_vunref(vp);
if (VTOI(vp)->i_lfs_iflags & LFSI_BMAP)
- vrecycle(vp, NULL, NULL);
+ vrecycle(vp, NULL);
numrefed--;
}
@@ -823,7 +823,7 @@ lfs_bmapv(struct proc *p, fsid_t *fsidp,
lfs_vunref(vp);
/* Recycle as above. */
if (ip->i_lfs_iflags & LFSI_BMAP)
- vrecycle(vp, NULL, NULL);
+ vrecycle(vp, NULL);
numrefed--;
}