Module Name:    src
Committed By:   hannken
Date:           Mon Mar 24 13:42:41 UTC 2014

Modified Files:
        src/distrib/sets/lists/comp: mi
        src/share/man/man9: Makefile vnode.9
        src/sys/fs/puffs: puffs_vnops.c
        src/sys/fs/union: union_vnops.c
        src/sys/kern: vfs_vnode.c
        src/sys/miscfs/genfs: genfs_vnops.c layer_vnops.c
        src/sys/miscfs/specfs: spec_vnops.c
        src/sys/sys: param.h vnode.h
        src/sys/ufs/ext2fs: ext2fs_vnops.c
        src/sys/ufs/ffs: ffs_vnops.c
        src/sys/ufs/lfs: lfs_segment.c lfs_syscalls.c lfs_vfsops.c lfs_vnops.c
        src/usr.sbin/pstat: pstat.8 pstat.c

Log Message:
- Make VI_XLOCK, VI_CLEAN and VI_LOCKSHARE private to kern/vfs_*.c.
- Make vwait() static.
- Add  vdead_check() to check a vnode for being or becoming dead.

Discussed on tech-kern.

Welcome to 6.99.38


To generate a diff of this commit:
cvs rdiff -u -r1.1885 -r1.1886 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.376 -r1.377 src/share/man/man9/Makefile
cvs rdiff -u -r1.60 -r1.61 src/share/man/man9/vnode.9
cvs rdiff -u -r1.180 -r1.181 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.58 -r1.59 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.34 -r1.35 src/sys/kern/vfs_vnode.c
cvs rdiff -u -r1.191 -r1.192 src/sys/miscfs/genfs/genfs_vnops.c
cvs rdiff -u -r1.56 -r1.57 src/sys/miscfs/genfs/layer_vnops.c
cvs rdiff -u -r1.142 -r1.143 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.446 -r1.447 src/sys/sys/param.h
cvs rdiff -u -r1.245 -r1.246 src/sys/sys/vnode.h
cvs rdiff -u -r1.110 -r1.111 src/sys/ufs/ext2fs/ext2fs_vnops.c
cvs rdiff -u -r1.123 -r1.124 src/sys/ufs/ffs/ffs_vnops.c
cvs rdiff -u -r1.235 -r1.236 src/sys/ufs/lfs/lfs_segment.c
cvs rdiff -u -r1.151 -r1.152 src/sys/ufs/lfs/lfs_syscalls.c
cvs rdiff -u -r1.319 -r1.320 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -u -r1.261 -r1.262 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.39 -r1.40 src/usr.sbin/pstat/pstat.8
cvs rdiff -u -r1.122 -r1.123 src/usr.sbin/pstat/pstat.c

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

Modified files:

Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.1885 src/distrib/sets/lists/comp/mi:1.1886
--- src/distrib/sets/lists/comp/mi:1.1885	Sat Mar 22 11:24:35 2014
+++ src/distrib/sets/lists/comp/mi	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: mi,v 1.1885 2014/03/22 11:24:35 skrll Exp $
+#	$NetBSD: mi,v 1.1886 2014/03/24 13:42:40 hannken Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -10977,6 +10977,7 @@
 ./usr/share/man/cat9/vdevgone.0			comp-sys-catman		.cat
 ./usr/share/man/cat9/veriexec.0			comp-sys-catman		.cat
 ./usr/share/man/cat9/vfinddev.0			comp-sys-catman		.cat
+./usr/share/man/cat9/vdead_check.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/vflush.0			comp-sys-catman		.cat
 ./usr/share/man/cat9/vflushbuf.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/vfs.0			comp-sys-catman		.cat
@@ -17630,6 +17631,7 @@
 ./usr/share/man/html9/vdevgone.html		comp-sys-htmlman	html
 ./usr/share/man/html9/veriexec.html		comp-sys-htmlman	html
 ./usr/share/man/html9/vfinddev.html		comp-sys-htmlman	html
+./usr/share/man/html9/vdead_check.html		comp-sys-htmlman	html
 ./usr/share/man/html9/vflush.html		comp-sys-htmlman	html
 ./usr/share/man/html9/vflushbuf.html		comp-sys-htmlman	html
 ./usr/share/man/html9/vfs.html			comp-sys-htmlman	html
@@ -24522,6 +24524,7 @@
 ./usr/share/man/man9/vdevgone.9			comp-sys-man		.man
 ./usr/share/man/man9/veriexec.9			comp-sys-man		.man
 ./usr/share/man/man9/vfinddev.9			comp-sys-man		.man
+./usr/share/man/man9/vdead_check.9		comp-sys-man		.man
 ./usr/share/man/man9/vflush.9			comp-sys-man		.man
 ./usr/share/man/man9/vflushbuf.9		comp-sys-man		.man
 ./usr/share/man/man9/vfs.9			comp-sys-man		.man

Index: src/share/man/man9/Makefile
diff -u src/share/man/man9/Makefile:1.376 src/share/man/man9/Makefile:1.377
--- src/share/man/man9/Makefile:1.376	Sat Mar 22 11:24:36 2014
+++ src/share/man/man9/Makefile	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-#       $NetBSD: Makefile,v 1.376 2014/03/22 11:24:36 skrll Exp $
+#       $NetBSD: Makefile,v 1.377 2014/03/24 13:42:40 hannken Exp $
 
 #	Makefile for section 9 (kernel function and variable) manual pages.
 
@@ -898,6 +898,7 @@ MLINKS+=vnode.9 vref.9 \
 	vnode.9 vrecycle.9 \
 	vnode.9 vgone.9 \
 	vnode.9 vgonel.9 \
+	vnode.9 vdead_check.9 \
 	vnode.9 vflush.9 \
 	vnode.9 vaccess.9 \
 	vnode.9 bdevvp.9 \

Index: src/share/man/man9/vnode.9
diff -u src/share/man/man9/vnode.9:1.60 src/share/man/man9/vnode.9:1.61
--- src/share/man/man9/vnode.9:1.60	Wed Mar  5 09:37:29 2014
+++ src/share/man/man9/vnode.9	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-.\"     $NetBSD: vnode.9,v 1.60 2014/03/05 09:37:29 hannken Exp $
+.\"     $NetBSD: vnode.9,v 1.61 2014/03/24 13:42:40 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 March 5, 2014
+.Dd March 24, 2014
 .Dt VNODE 9
 .Os
 .Sh NAME
@@ -44,6 +44,7 @@
 .Nm vrecycle ,
 .Nm vgone ,
 .Nm vgonel ,
+.Nm vdead_check ,
 .Nm vflush ,
 .Nm vaccess ,
 .Nm bdevvp ,
@@ -85,6 +86,8 @@
 .Ft void
 .Fn vgonel "struct vnode *vp" "struct lwp *l"
 .Ft int
+.Fn vdead_check "struct vnode *vp" "int flags"
+.Ft int
 .Fn vflush "struct mount *mp" "struct vnode *skipvp" "int flags"
 .Ft int
 .Fn vaccess "enum vtype type" "mode_t file_mode" "uid_t uid" "gid_t gid" "mode_t acc_mode" "kauth_cred_t cred"
@@ -630,6 +633,25 @@ in preparation for recycling.
 Eliminate all activity associated with the locked vnode
 .Fa vp
 in preparation for recycling.
+.It Fn vdead_check "vp" "flags"
+Check the vnode
+.Fa vp
+for being or becoming dead.
+Returns
+.Er ENOENT
+for a dead vnode and zero otherwise.
+If
+.Fa flags
+is
+.Dv VDEAD_NOWAIT
+it will return
+.Er EBUSY
+if the vnode is becoming dead and the function will not sleep.
+.Pp
+Whenever this function returns a non-zero value all future calls
+for this
+.Fa vp
+will also return a non-zero value.
 .It Fn vflush "mp" "skipvp" "flags"
 Remove any vnodes in the vnode table belonging to mount point
 .Fa mp .

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.180 src/sys/fs/puffs/puffs_vnops.c:1.181
--- src/sys/fs/puffs/puffs_vnops.c:1.180	Fri Feb  7 15:29:21 2014
+++ src/sys/fs/puffs/puffs_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.180 2014/02/07 15:29:21 hannken Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.181 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007  Antti Kantee.  All Rights Reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.180 2014/02/07 15:29:21 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.181 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -1692,7 +1692,7 @@ puffs_vnop_fsync(void *v)
 	 */
 	if (dofaf == 0) {
 		mutex_enter(vp->v_interlock);
-		if (vp->v_iflag & VI_XLOCK)
+		if (vdead_check(vp, VDEAD_NOWAIT) != 0)
 			dofaf = 1;
 		mutex_exit(vp->v_interlock);
 	}
@@ -2601,7 +2601,7 @@ puffs_vnop_strategy(void *v)
 	 */
 	if (BUF_ISWRITE(bp)) {
 		mutex_enter(vp->v_interlock);
-		if (vp->v_iflag & VI_XLOCK)
+		if (vdead_check(vp, VDEAD_NOWAIT) != 0)
 			dofaf = 1;
 		if (pn->pn_stat & PNODE_FAF)
 			dofaf = 1;

Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.58 src/sys/fs/union/union_vnops.c:1.59
--- src/sys/fs/union/union_vnops.c:1.58	Wed Mar 12 09:40:05 2014
+++ src/sys/fs/union/union_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: union_vnops.c,v 1.58 2014/03/12 09:40:05 hannken Exp $	*/
+/*	$NetBSD: union_vnops.c,v 1.59 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.58 2014/03/12 09:40:05 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.59 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1636,12 +1636,7 @@ union_lock(void *v)
 		if (error)
 			return error;
 		if (mutex_tryenter(vp->v_interlock)) {
-			if (ISSET(vp->v_iflag, VI_XLOCK))
-				error = EBUSY;
-			else if (ISSET(vp->v_iflag, VI_CLEAN))
-				error = ENOENT;
-			else
-				error = 0;
+			error = vdead_check(vp, VDEAD_NOWAIT);
 			mutex_exit(vp->v_interlock);
 		} else
 			error = EBUSY;
@@ -1665,15 +1660,14 @@ union_lock(void *v)
 	mutex_exit(&un->un_lock);
 
 	mutex_enter(vp->v_interlock);
-	if (ISSET(vp->v_iflag, VI_XLOCK) || ISSET(vp->v_iflag, VI_CLEAN)) {
+	error = vdead_check(vp, VDEAD_NOWAIT);
+	if (error) {
 		union_unlock1(vp, lockvp);
-		vwait(vp, VI_XLOCK);
-		KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
-		mutex_exit(vp->v_interlock);
-		return ENOENT;
+		error = vdead_check(vp, 0);
+		KASSERT(error == ENOENT);
 	}
 	mutex_exit(vp->v_interlock);
-	return 0;
+	return error;
 }
 
 int

Index: src/sys/kern/vfs_vnode.c
diff -u src/sys/kern/vfs_vnode.c:1.34 src/sys/kern/vfs_vnode.c:1.35
--- src/sys/kern/vfs_vnode.c:1.34	Mon Mar 17 09:27:37 2014
+++ src/sys/kern/vfs_vnode.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_vnode.c,v 1.34 2014/03/17 09:27:37 hannken Exp $	*/
+/*	$NetBSD: vfs_vnode.c,v 1.35 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -116,7 +116,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.34 2014/03/17 09:27:37 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.35 2014/03/24 13:42:40 hannken Exp $");
 
 #define _VFS_VNODE_PRIVATE
 
@@ -176,6 +176,7 @@ static void		vdrain_thread(void *);
 static void		vrele_thread(void *);
 static void		vnpanic(vnode_t *, const char *, ...)
     __printflike(2, 3);
+static void		vwait(vnode_t *, int);
 
 /* Routines having to do with the management of the vnode table. */
 extern int		(**dead_vnodeop_p)(void *);
@@ -1140,10 +1141,35 @@ vwakeup(struct buf *bp)
 }
 
 /*
+ * Test a vnode for being or becoming dead.  Returns one of:
+ * EBUSY:  vnode is becoming dead, with "flags == VDEAD_NOWAIT" only.
+ * ENOENT: vnode is dead.
+ * 0:      otherwise.
+ *
+ * Whenever this function returns a non-zero value all future
+ * calls will also return a non-zero value.
+ */
+int
+vdead_check(struct vnode *vp, int flags)
+{
+
+	KASSERT(mutex_owned(vp->v_interlock));
+	if (ISSET(vp->v_iflag, VI_XLOCK)) {
+		if (ISSET(flags, VDEAD_NOWAIT))
+			return EBUSY;
+		vwait(vp, VI_XLOCK);
+		KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
+	}
+	if (ISSET(vp->v_iflag, VI_CLEAN))
+		return ENOENT;
+	return 0;
+}
+
+/*
  * Wait for a vnode (typically with VI_XLOCK set) to be cleaned or
  * recycled.
  */
-void
+static void
 vwait(vnode_t *vp, int flags)
 {
 

Index: src/sys/miscfs/genfs/genfs_vnops.c
diff -u src/sys/miscfs/genfs/genfs_vnops.c:1.191 src/sys/miscfs/genfs/genfs_vnops.c:1.192
--- src/sys/miscfs/genfs/genfs_vnops.c:1.191	Wed Mar 12 09:38:51 2014
+++ src/sys/miscfs/genfs/genfs_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_vnops.c,v 1.191 2014/03/12 09:38:51 hannken Exp $	*/
+/*	$NetBSD: genfs_vnops.c,v 1.192 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.191 2014/03/12 09:38:51 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.192 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -297,12 +297,9 @@ genfs_deadlock(void *v)
 		if (! rw_tryenter(&vp->v_lock, op))
 			return EBUSY;
 		if (mutex_tryenter(vp->v_interlock)) {
-			if (ISSET(vp->v_iflag, VI_XLOCK))
-				error = EBUSY;
-			else {
-				KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
-				error = (ISSET(flags, LK_RETRY) ? 0 : ENOENT);
-			}
+			error = vdead_check(vp, VDEAD_NOWAIT);
+			if (error == ENOENT && ISSET(flags, LK_RETRY))
+				error = 0;
 			mutex_exit(vp->v_interlock);
 		} else
 			error = EBUSY;
@@ -313,14 +310,16 @@ genfs_deadlock(void *v)
 
 	rw_enter(&vp->v_lock, op);
 	mutex_enter(vp->v_interlock);
-	if (ISSET(vp->v_iflag, VI_XLOCK)) {
+	error = vdead_check(vp, VDEAD_NOWAIT);
+	if (error == EBUSY) {
 		rw_exit(&vp->v_lock);
-		vwait(vp, VI_XLOCK);
+		error = vdead_check(vp, 0);
+		KASSERT(error == ENOENT);
 		mutex_exit(vp->v_interlock);
 		rw_enter(&vp->v_lock, op);
 		mutex_enter(vp->v_interlock);
 	}
-	KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
+	KASSERT(error == ENOENT);
 	mutex_exit(vp->v_interlock);
 	if (! ISSET(flags, LK_RETRY)) {
 		rw_exit(&vp->v_lock);
@@ -370,12 +369,7 @@ genfs_lock(void *v)
 			return EBUSY;
 		}
 		if (mutex_tryenter(vp->v_interlock)) {
-			if (ISSET(vp->v_iflag, VI_XLOCK))
-				error = EBUSY;
-			else if (ISSET(vp->v_iflag, VI_CLEAN))
-				error = ENOENT;
-			else
-				error = 0;
+			error = vdead_check(vp, VDEAD_NOWAIT);
 			mutex_exit(vp->v_interlock);
 		} else
 			error = EBUSY;
@@ -389,16 +383,15 @@ genfs_lock(void *v)
 	fstrans_start(mp, FSTRANS_SHARED);
 	rw_enter(&vp->v_lock, op);
 	mutex_enter(vp->v_interlock);
-	if (ISSET(vp->v_iflag, VI_XLOCK) || ISSET(vp->v_iflag, VI_CLEAN)) {
+	error = vdead_check(vp, VDEAD_NOWAIT);
+	if (error) {
 		rw_exit(&vp->v_lock);
 		fstrans_done(mp);
-		vwait(vp, VI_XLOCK);
-		KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
-		mutex_exit(vp->v_interlock);
-		return ENOENT;
+		error = vdead_check(vp, 0);
+		KASSERT(error == ENOENT);
 	}
 	mutex_exit(vp->v_interlock);
-	return 0;
+	return error;
 }
 
 /*

Index: src/sys/miscfs/genfs/layer_vnops.c
diff -u src/sys/miscfs/genfs/layer_vnops.c:1.56 src/sys/miscfs/genfs/layer_vnops.c:1.57
--- src/sys/miscfs/genfs/layer_vnops.c:1.56	Wed Mar 12 09:39:23 2014
+++ src/sys/miscfs/genfs/layer_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_vnops.c,v 1.56 2014/03/12 09:39:23 hannken Exp $	*/
+/*	$NetBSD: layer_vnops.c,v 1.57 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -170,7 +170,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.56 2014/03/12 09:39:23 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.57 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -723,12 +723,7 @@ layer_lock(void *v)
 		if (error)
 			return error;
 		if (mutex_tryenter(vp->v_interlock)) {
-			if (ISSET(vp->v_iflag, VI_XLOCK))
-				error = EBUSY;
-			else if (ISSET(vp->v_iflag, VI_CLEAN))
-				error = ENOENT;
-			else
-				error = 0;
+			error = vdead_check(vp, VDEAD_NOWAIT);
 			mutex_exit(vp->v_interlock);
 		} else
 			error = EBUSY;
@@ -742,16 +737,15 @@ layer_lock(void *v)
 		return error;
 
 	mutex_enter(vp->v_interlock);
-	if (ISSET(vp->v_iflag, VI_XLOCK) || ISSET(vp->v_iflag, VI_CLEAN)) {
+	error = vdead_check(vp, VDEAD_NOWAIT);
+	if (error) {
 		VOP_UNLOCK(lowervp);
-		vwait(vp, VI_XLOCK);
-		KASSERT(ISSET(vp->v_iflag, VI_CLEAN));
-		mutex_exit(vp->v_interlock);
-		return ENOENT;
+		error = vdead_check(vp, 0);
+		KASSERT(error == ENOENT);
 	}
 	mutex_exit(vp->v_interlock);
 
-	return 0;
+	return error;
 }
 
 /*

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.142 src/sys/miscfs/specfs/spec_vnops.c:1.143
--- src/sys/miscfs/specfs/spec_vnops.c:1.142	Fri Feb  7 15:29:22 2014
+++ src/sys/miscfs/specfs/spec_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.142 2014/02/07 15:29:22 hannken Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.143 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.142 2014/02/07 15:29:22 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.143 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -288,7 +288,7 @@ spec_node_lookup_by_dev(enum vtype type,
 		if (type == vp->v_type && dev == vp->v_rdev) {
 			mutex_enter(vp->v_interlock);
 			/* If clean or being cleaned, then ignore it. */
-			if ((vp->v_iflag & (VI_CLEAN | VI_XLOCK)) == 0)
+			if (vdead_check(vp, VDEAD_NOWAIT) == 0)
 				break;
 			mutex_exit(vp->v_interlock);
 		}
@@ -392,7 +392,6 @@ spec_node_revoke(vnode_t *vp)
 
 	KASSERT(vp->v_type == VBLK || vp->v_type == VCHR);
 	KASSERT(vp->v_specnode != NULL);
-	KASSERT((vp->v_iflag & VI_XLOCK) != 0);
 	KASSERT(sn->sn_gone == false);
 
 	mutex_enter(&device_lock);
@@ -863,7 +862,7 @@ spec_ioctl(void *v)
 	vp = ap->a_vp;
 	dev = NODEV;
 	mutex_enter(vp->v_interlock);
-	if ((vp->v_iflag & VI_XLOCK) == 0 && vp->v_specnode) {
+	if (vdead_check(vp, VDEAD_NOWAIT) == 0 && vp->v_specnode) {
 		dev = vp->v_rdev;
 	}
 	mutex_exit(vp->v_interlock);
@@ -907,7 +906,7 @@ spec_poll(void *v)
 	vp = ap->a_vp;
 	dev = NODEV;
 	mutex_enter(vp->v_interlock);
-	if ((vp->v_iflag & VI_XLOCK) == 0 && vp->v_specnode) {
+	if (vdead_check(vp, VDEAD_NOWAIT) == 0 && vp->v_specnode) {
 		dev = vp->v_rdev;
 	}
 	mutex_exit(vp->v_interlock);
@@ -1082,13 +1081,21 @@ spec_close(void *v)
 	struct vnode *vp = ap->a_vp;
 	struct session *sess;
 	dev_t dev = vp->v_rdev;
-	int mode, error, flags, flags1, count;
+	int flags = ap->a_fflag;
+	int mode, error, count;
 	specnode_t *sn;
 	specdev_t *sd;
 
-	flags = vp->v_iflag;
+	mutex_enter(vp->v_interlock);
 	sn = vp->v_specnode;
 	sd = sn->sn_dev;
+	/*
+	 * If we're going away soon, make this non-blocking.
+	 * Also ensures that we won't wedge in vn_lock below.
+	 */
+	if (vdead_check(vp, VDEAD_NOWAIT) != 0)
+		flags |= FNONBLOCK;
+	mutex_exit(vp->v_interlock);
 
 	switch (vp->v_type) {
 
@@ -1170,30 +1177,20 @@ spec_close(void *v)
 	if (count != 0)
 		return 0;
 
-	flags1 = ap->a_fflag;
-
-	/*
-	 * if VI_XLOCK is set, then we're going away soon, so make this
-	 * non-blocking. Also ensures that we won't wedge in vn_lock below.
-	 */
-	if (flags & VI_XLOCK)
-		flags1 |= FNONBLOCK;
-
 	/*
 	 * If we're able to block, release the vnode lock & reacquire. We
 	 * might end up sleeping for someone else who wants our queues. They
-	 * won't get them if we hold the vnode locked. Also, if VI_XLOCK is
-	 * set, don't release the lock as we won't be able to regain it.
+	 * won't get them if we hold the vnode locked.
 	 */
-	if (!(flags1 & FNONBLOCK))
+	if (!(flags & FNONBLOCK))
 		VOP_UNLOCK(vp);
 
 	if (vp->v_type == VBLK)
-		error = bdev_close(dev, flags1, mode, curlwp);
+		error = bdev_close(dev, flags, mode, curlwp);
 	else
-		error = cdev_close(dev, flags1, mode, curlwp);
+		error = cdev_close(dev, flags, mode, curlwp);
 
-	if (!(flags1 & FNONBLOCK))
+	if (!(flags & FNONBLOCK))
 		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
 
 	return (error);

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.446 src/sys/sys/param.h:1.447
--- src/sys/sys/param.h:1.446	Tue Mar 18 10:21:47 2014
+++ src/sys/sys/param.h	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.446 2014/03/18 10:21:47 hannken Exp $	*/
+/*	$NetBSD: param.h,v 1.447 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	699003700	/* NetBSD 6.99.37 */
+#define	__NetBSD_Version__	699003800	/* NetBSD 6.99.38 */
 
 #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.245 src/sys/sys/vnode.h:1.246
--- src/sys/sys/vnode.h:1.245	Tue Mar 18 10:21:47 2014
+++ src/sys/sys/vnode.h	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnode.h,v 1.245 2014/03/18 10:21:47 hannken Exp $	*/
+/*	$NetBSD: vnode.h,v 1.246 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -199,15 +199,17 @@ typedef struct vnode vnode_t;
 #define	VI_EXECMAP	0x00000200	/* might have PROT_EXEC mappings */
 #define	VI_WRMAP	0x00000400	/* might have PROT_WRITE u. mappings */
 #define	VI_WRMAPDIRTY	0x00000800	/* might have dirty pages */
+#ifdef _VFS_VNODE_PRIVATE
 #define	VI_XLOCK	0x00001000	/* vnode is locked to change type */
+#endif	/* _VFS_VNODE_PRIVATE */
 #define	VI_ONWORKLST	0x00004000	/* On syncer work-list */
 #ifdef _VFS_VNODE_PRIVATE
 #define	VI_MARKER	0x00008000	/* Dummy marker vnode */
 #endif	/* _VFS_VNODE_PRIVATE */
 #define	VI_LAYER	0x00020000	/* vnode is on a layer filesystem */
+#ifdef _VFS_VNODE_PRIVATE
 #define	VI_LOCKSHARE	0x00040000	/* v_interlock is shared */
 #define	VI_CLEAN	0x00080000	/* has been reclaimed */
-#ifdef _VFS_VNODE_PRIVATE
 #define	VI_CHANGING	0x00100000	/* vnode changes state */
 #endif	/* _VFS_VNODE_PRIVATE */
 
@@ -332,6 +334,8 @@ extern const int	vttoif_tab[];
 #define	UPDATE_DIROP	0x0002		/* update: hint to fs to wait or not */
 #define	UPDATE_CLOSE	0x0004		/* update: clean up on close */
 
+#define VDEAD_NOWAIT	0x0001		/* vdead_check: do not sleep */
+
 void holdrelel(struct vnode *);
 void vholdl(struct vnode *);
 void vref(struct vnode *);
@@ -546,7 +550,7 @@ void 	vrele_async(struct vnode *);
 void	vrele_flush(void);
 int	vtruncbuf(struct vnode *, daddr_t, bool, int);
 void	vwakeup(struct buf *);
-void	vwait(struct vnode *, int);
+int	vdead_check(struct vnode *, int);
 void	vrevoke(struct vnode *);
 struct vnode *
 	vnalloc(struct mount *);

Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.110 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.111
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.110	Thu Jan 23 10:13:57 2014
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vnops.c,v 1.110 2014/01/23 10:13:57 hannken Exp $	*/
+/*	$NetBSD: ext2fs_vnops.c,v 1.111 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.110 2014/01/23 10:13:57 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.111 2014/03/24 13:42:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1116,7 +1116,7 @@ ext2fs_reclaim(void *v)
 	/*
 	 * The inode must be freed and updated before being removed
 	 * from its hash chain.  Other threads trying to gain a hold
-	 * on the inode will be stalled because it is locked (VI_XLOCK).
+	 * or lock on the inode will be stalled.
 	 */
 	if (ip->i_omode == 1 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0)
 		ext2fs_vfree(vp, ip->i_number, ip->i_e2fs_mode);

Index: src/sys/ufs/ffs/ffs_vnops.c
diff -u src/sys/ufs/ffs/ffs_vnops.c:1.123 src/sys/ufs/ffs/ffs_vnops.c:1.124
--- src/sys/ufs/ffs/ffs_vnops.c:1.123	Sun Jun 23 07:28:37 2013
+++ src/sys/ufs/ffs/ffs_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vnops.c,v 1.123 2013/06/23 07:28:37 dholland Exp $	*/
+/*	$NetBSD: ffs_vnops.c,v 1.124 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.123 2013/06/23 07:28:37 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.124 2014/03/24 13:42:40 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -560,7 +560,7 @@ ffs_reclaim(void *v)
 	/*
 	 * The inode must be freed and updated before being removed
 	 * from its hash chain.  Other threads trying to gain a hold
-	 * on the inode will be stalled because it is locked (VI_XLOCK).
+	 * or lock on the inode will be stalled.
 	 */
 	error = UFS_WAPBL_BEGIN(mp);
 	if (error) {

Index: src/sys/ufs/lfs/lfs_segment.c
diff -u src/sys/ufs/lfs/lfs_segment.c:1.235 src/sys/ufs/lfs/lfs_segment.c:1.236
--- src/sys/ufs/lfs/lfs_segment.c:1.235	Tue Mar 18 10:21:47 2014
+++ src/sys/ufs/lfs/lfs_segment.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_segment.c,v 1.235 2014/03/18 10:21:47 hannken Exp $	*/
+/*	$NetBSD: lfs_segment.c,v 1.236 2014/03/24 13:42:40 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.235 2014/03/18 10:21:47 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.236 2014/03/24 13:42:40 hannken Exp $");
 
 #define _VFS_VNODE_PRIVATE	/* XXX: check for VI_MARKER, this has to go */
 
@@ -281,11 +281,12 @@ lfs_vflush(struct vnode *vp)
 		ivndebug(vp,"vflush/writeinprog");
 		cv_wait(&vp->v_cv, vp->v_interlock);
 	}
+	error = vdead_check(vp, VDEAD_NOWAIT);
 	mutex_exit(vp->v_interlock);
 
-	/* Protect against VI_XLOCK deadlock in vinvalbuf() */
-	lfs_seglock(fs, SEGM_SYNC | ((vp->v_iflag & VI_XLOCK) ? SEGM_RECLAIM : 0));
-	if (vp->v_iflag & VI_XLOCK) {
+	/* Protect against deadlock in vinvalbuf() */
+	lfs_seglock(fs, SEGM_SYNC | ((error != 0) ? SEGM_RECLAIM : 0));
+	if (error != 0) {
 		fs->lfs_reclino = ip->i_number;
 	}
 
@@ -511,7 +512,7 @@ lfs_writevnodes(struct lfs *fs, struct m
 
 		mutex_enter(vp->v_interlock);
 		if (vp->v_type == VNON || (vp->v_iflag & VI_MARKER) ||
-		    (vp->v_iflag & VI_CLEAN) != 0) {
+		    vdead_check(vp, VDEAD_NOWAIT) != 0) {
 			mutex_exit(vp->v_interlock);
 			continue;
 		}
@@ -2755,7 +2756,7 @@ lfs_shellsort(struct buf **bp_array, int
 }
 
 /*
- * Call vget with LK_NOWAIT.  If we are the one who holds VI_XLOCK,
+ * Call vget with LK_NOWAIT.  If we are the one who is dead,
  * however, we must press on.  Just fake success in that case.
  */
 int

Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.151 src/sys/ufs/lfs/lfs_syscalls.c:1.152
--- src/sys/ufs/lfs/lfs_syscalls.c:1.151	Wed Mar  5 09:37:29 2014
+++ src/sys/ufs/lfs/lfs_syscalls.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_syscalls.c,v 1.151 2014/03/05 09:37:29 hannken Exp $	*/
+/*	$NetBSD: lfs_syscalls.c,v 1.152 2014/03/24 13:42:40 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.151 2014/03/05 09:37:29 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.152 2014/03/24 13:42:40 hannken Exp $");
 
 #ifndef LFS
 # define LFS		/* for prototypes in syscallargs.h */
@@ -743,7 +743,7 @@ lfs_bmapv(struct proc *p, fsid_t *fsidp,
 			 */
 			mutex_enter(&ulfs_ihash_lock);
 			vp = ulfs_ihashlookup(ump->um_dev, blkp->bi_inode);
-			if (vp != NULL && !(vp->v_iflag & VI_XLOCK)) {
+			if (vp != NULL && vdead_check(vp, VDEAD_NOWAIT) == 0) {
 				ip = VTOI(vp);
 				mutex_enter(vp->v_interlock);
 				mutex_exit(&ulfs_ihash_lock);
@@ -1050,8 +1050,8 @@ lfs_fasthashget(dev_t dev, ino_t ino, st
 	if ((vp = ulfs_ihashlookup(dev, ino)) != NULL) {
 		mutex_enter(vp->v_interlock);
 		mutex_exit(&ulfs_ihash_lock);
-		if (vp->v_iflag & VI_XLOCK) {
-			DLOG((DLOG_CLEAN, "lfs_fastvget: ino %d VI_XLOCK\n",
+		if (vdead_check(vp, VDEAD_NOWAIT) != 0) {
+			DLOG((DLOG_CLEAN, "lfs_fastvget: ino %d dead\n",
 			      ino));
 			lfs_stats.clean_vnlocked++;
 			mutex_exit(vp->v_interlock);

Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.319 src/sys/ufs/lfs/lfs_vfsops.c:1.320
--- src/sys/ufs/lfs/lfs_vfsops.c:1.319	Sun Mar 23 15:21:17 2014
+++ src/sys/ufs/lfs/lfs_vfsops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vfsops.c,v 1.319 2014/03/23 15:21:17 hannken Exp $	*/
+/*	$NetBSD: lfs_vfsops.c,v 1.320 2014/03/24 13:42:40 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.319 2014/03/23 15:21:17 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.320 2014/03/24 13:42:40 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -239,7 +239,7 @@ lfs_sysctl_setup(struct sysctllog **clog
 		{ "write_exceeded", "Number of times writer invoked flush" },
 		{ "flush_invoked",  "Number of times flush was invoked" },
 		{ "vflush_invoked", "Number of time vflush was called" },
-		{ "clean_inlocked", "Number of vnodes skipped for VI_XLOCK" },
+		{ "clean_inlocked", "Number of vnodes skipped for being dead" },
 		{ "clean_vnlocked", "Number of vnodes skipped for vget failure" },
 		{ "segs_reclaimed", "Number of segments reclaimed" },
 	};
@@ -1755,10 +1755,13 @@ lfs_gop_write(struct vnode *vp, struct v
 	 * We must write everything, however, if our vnode is being
 	 * reclaimed.
 	 */
-	if (LFS_STARVED_FOR_SEGS(fs) && !(vp->v_iflag & VI_XLOCK)) {
+	mutex_enter(vp->v_interlock);
+	if (LFS_STARVED_FOR_SEGS(fs) && vdead_check(vp, VDEAD_NOWAIT) == 0) {
+		mutex_exit(vp->v_interlock);
 		failreason = "Starved for segs and not flushing vp";
  		goto tryagain;
 	}
+	mutex_exit(vp->v_interlock);
 
 	/*
 	 * Sometimes things slip past the filters in lfs_putpages,

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.261 src/sys/ufs/lfs/lfs_vnops.c:1.262
--- src/sys/ufs/lfs/lfs_vnops.c:1.261	Thu Jan 23 10:13:57 2014
+++ src/sys/ufs/lfs/lfs_vnops.c	Mon Mar 24 13:42:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.261 2014/01/23 10:13:57 hannken Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.262 2014/03/24 13:42:40 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_vnops.c,v 1.261 2014/01/23 10:13:57 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.262 2014/03/24 13:42:40 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -633,7 +633,7 @@ lfs_mknod(void *v)
 
 	/*
 	 * Call fsync to write the vnode so that we don't have to deal with
-	 * flushing it when it's marked VU_DIROP|VI_XLOCK.
+	 * flushing it when it's marked VU_DIROP or reclaiming.
 	 *
 	 * XXX KS - If we can't flush we also can't call vgone(), so must
 	 * return.  But, that leaves this vnode in limbo, also not good.
@@ -984,7 +984,7 @@ lfs_reclaim(void *v)
 	/*
 	 * The inode must be freed and updated before being removed
 	 * from its hash chain.  Other threads trying to gain a hold
-	 * on the inode will be stalled because it is locked (VI_XLOCK).
+	 * or lock on the inode will be stalled.
 	 */
 	if (ip->i_nlink <= 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0)
 		lfs_vfree(vp, ip->i_number, ip->i_omode);
@@ -1203,10 +1203,11 @@ lfs_flush_dirops(struct lfs *fs)
 		nip = TAILQ_NEXT(ip, i_lfs_dchain);
 		mutex_exit(&lfs_lock);
 		vp = ITOV(ip);
+		mutex_enter(vp->v_interlock);
 
 		KASSERT((ip->i_flag & IN_ADIROP) == 0);
 		KASSERT(vp->v_uflag & VU_DIROP);
-		KASSERT(!(vp->v_iflag & VI_XLOCK));
+		KASSERT(vdead_check(vp, VDEAD_NOWAIT) == 0);
 
 		/*
 		 * All writes to directories come from dirops; all
@@ -1216,10 +1217,12 @@ lfs_flush_dirops(struct lfs *fs)
 		 * directory blocks inodes and file inodes.  So we don't
 		 * really need to lock.
 		 */
-		if (vp->v_iflag & VI_XLOCK) {
+		if (vdead_check(vp, VDEAD_NOWAIT) != 0) {
+			mutex_exit(vp->v_interlock);
 			mutex_enter(&lfs_lock);
 			continue;
 		}
+		mutex_exit(vp->v_interlock);
 		/* XXX see below
 		 * waslocked = VOP_ISLOCKED(vp);
 		 */
@@ -1324,7 +1327,8 @@ lfs_flush_pchain(struct lfs *fs)
 			goto top;
 
 		mutex_enter(vp->v_interlock);
-		if ((vp->v_iflag & VI_XLOCK) || (vp->v_uflag & VU_DIROP) != 0) {
+		if (vdead_check(vp, VDEAD_NOWAIT) != 0 ||
+		    (vp->v_uflag & VU_DIROP) != 0) {
 			mutex_exit(vp->v_interlock);
 			continue;
 		}
@@ -2268,7 +2272,7 @@ lfs_putpages(void *v)
 	sp->vp = vp;
 
 	/* Note segments written by reclaim; only for debugging */
-	if ((vp->v_iflag & VI_XLOCK) != 0) {
+	if (vdead_check(vp, VDEAD_NOWAIT) != 0) {
 		sp->seg_flags |= SEGM_RECLAIM;
 		fs->lfs_reclino = ip->i_number;
 	}

Index: src/usr.sbin/pstat/pstat.8
diff -u src/usr.sbin/pstat/pstat.8:1.39 src/usr.sbin/pstat/pstat.8:1.40
--- src/usr.sbin/pstat/pstat.8:1.39	Sat Dec  5 20:11:18 2009
+++ src/usr.sbin/pstat/pstat.8	Mon Mar 24 13:42:41 2014
@@ -1,4 +1,4 @@
-.\"	$NetBSD: pstat.8,v 1.39 2009/12/05 20:11:18 pooka Exp $
+.\"	$NetBSD: pstat.8,v 1.40 2014/03/24 13:42:41 hannken Exp $
 .\"
 .\" Copyright (c) 1980, 1991, 1993, 1994
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"     from: @(#)pstat.8	8.5 (Berkeley) 5/13/94
 .\"
-.Dd December 5, 2009
+.Dd March 24, 2014
 .Dt PSTAT 8
 .Os
 .Sh NAME
@@ -270,14 +270,6 @@ VSYSTEM vnode being used by kernel.
 VISTTY vnode is a tty.
 .It E
 VEXECMAP vnode has PROT_EXEC mappings.
-.It L
-VXLOCK locked to change underlying type.
-.It W
-VXWANT process is waiting for vnode.
-.It B
-VBWAIT waiting for output to complete.
-.It A
-VALIASED vnode has an alias.
 .It D
 VDIROP lfs vnode involved in directory op.
 .It Y

Index: src/usr.sbin/pstat/pstat.c
diff -u src/usr.sbin/pstat/pstat.c:1.122 src/usr.sbin/pstat/pstat.c:1.123
--- src/usr.sbin/pstat/pstat.c:1.122	Sun Nov 24 13:13:12 2013
+++ src/usr.sbin/pstat/pstat.c	Mon Mar 24 13:42:41 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: pstat.c,v 1.122 2013/11/24 13:13:12 mlelstv Exp $	*/
+/*	$NetBSD: pstat.c,v 1.123 2014/03/24 13:42:41 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1980, 1991, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19
 #if 0
 static char sccsid[] = "@(#)pstat.c	8.16 (Berkeley) 5/9/95";
 #else
-__RCSID("$NetBSD: pstat.c,v 1.122 2013/11/24 13:13:12 mlelstv Exp $");
+__RCSID("$NetBSD: pstat.c,v 1.123 2014/03/24 13:42:41 hannken Exp $");
 #endif
 #endif /* not lint */
 
@@ -384,7 +384,6 @@ const struct flagbit_desc vnode_flags[] 
 	{ VV_SYSTEM,	'S' },
 	{ VV_ISTTY,	'I' },
 	{ VI_EXECMAP,	'E' },
-	{ VI_XLOCK,	'L' },
 	{ VU_DIROP,	'D' },
 	{ VI_LAYER,	'Y' },
 	{ VI_ONWORKLST,	'O' },

Reply via email to