Module Name:    src
Committed By:   riastradh
Date:           Tue Apr 11 14:25:02 UTC 2017

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c
        src/lib/libp2k: p2k.c
        src/share/man/man9: vnodeops.9
        src/sys/coda: coda_vnops.c
        src/sys/fs/adosfs: advnops.c
        src/sys/fs/cd9660: cd9660_node.c
        src/sys/fs/efs: efs_vnops.c
        src/sys/fs/filecorefs: filecore_node.c
        src/sys/fs/msdosfs: msdosfs_denode.c
        src/sys/fs/nilfs: nilfs_vnops.c
        src/sys/fs/ntfs: ntfs_vnops.c
        src/sys/fs/ptyfs: ptyfs_vnops.c
        src/sys/fs/puffs: puffs_vnops.c
        src/sys/fs/smbfs: smbfs_node.c
        src/sys/fs/sysvbfs: sysvbfs_vnops.c
        src/sys/fs/tmpfs: tmpfs_vnops.c
        src/sys/fs/udf: udf_vnops.c
        src/sys/fs/union: union_vnops.c
        src/sys/fs/unionfs: unionfs_vnops.c
        src/sys/fs/v7fs: v7fs_vnops.c
        src/sys/kern: vfs_vnode.c vnode_if.src
        src/sys/miscfs/deadfs: dead_vnops.c
        src/sys/miscfs/fdesc: fdesc_vnops.c
        src/sys/miscfs/fifofs: fifo_vnops.c
        src/sys/miscfs/genfs: layer_vnops.c
        src/sys/miscfs/kernfs: kernfs_vnops.c
        src/sys/miscfs/procfs: procfs_vnops.c
        src/sys/miscfs/specfs: spec_vnops.c
        src/sys/nfs: nfs_node.c
        src/sys/rump/librump/rumpvfs: rumpfs.c
        src/sys/ufs/chfs: chfs_vnops.c
        src/sys/ufs/ext2fs: ext2fs_inode.c
        src/sys/ufs/lfs: lfs_vnops.c ulfs_inode.c
        src/sys/ufs/mfs: mfs_vnops.c
        src/sys/ufs/ufs: ufs_inode.c

Log Message:
Make VOP_INACTIVE preserve vnode lock on return.

Discussed on tech-kern:
https://mail-index.netbsd.org/tech-kern/2017/04/01/msg021751.html

Ride 7.99.68, a bumpy bus of incremental vfs improvements!


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.68 -r1.69 src/lib/libp2k/p2k.c
cvs rdiff -u -r1.97 -r1.98 src/share/man/man9/vnodeops.9
cvs rdiff -u -r1.103 -r1.104 src/sys/coda/coda_vnops.c
cvs rdiff -u -r1.48 -r1.49 src/sys/fs/adosfs/advnops.c
cvs rdiff -u -r1.35 -r1.36 src/sys/fs/cd9660/cd9660_node.c
cvs rdiff -u -r1.36 -r1.37 src/sys/fs/efs/efs_vnops.c
cvs rdiff -u -r1.28 -r1.29 src/sys/fs/filecorefs/filecore_node.c
cvs rdiff -u -r1.53 -r1.54 src/sys/fs/msdosfs/msdosfs_denode.c
cvs rdiff -u -r1.33 -r1.34 src/sys/fs/nilfs/nilfs_vnops.c
cvs rdiff -u -r1.60 -r1.61 src/sys/fs/ntfs/ntfs_vnops.c
cvs rdiff -u -r1.52 -r1.53 src/sys/fs/ptyfs/ptyfs_vnops.c
cvs rdiff -u -r1.208 -r1.209 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.54 -r1.55 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.60 -r1.61 src/sys/fs/sysvbfs/sysvbfs_vnops.c
cvs rdiff -u -r1.130 -r1.131 src/sys/fs/tmpfs/tmpfs_vnops.c
cvs rdiff -u -r1.102 -r1.103 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.64 -r1.65 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.9 -r1.10 src/sys/fs/unionfs/unionfs_vnops.c
cvs rdiff -u -r1.23 -r1.24 src/sys/fs/v7fs/v7fs_vnops.c
cvs rdiff -u -r1.81 -r1.82 src/sys/kern/vfs_vnode.c
cvs rdiff -u -r1.70 -r1.71 src/sys/kern/vnode_if.src
cvs rdiff -u -r1.59 -r1.60 src/sys/miscfs/deadfs/dead_vnops.c
cvs rdiff -u -r1.127 -r1.128 src/sys/miscfs/fdesc/fdesc_vnops.c
cvs rdiff -u -r1.77 -r1.78 src/sys/miscfs/fifofs/fifo_vnops.c
cvs rdiff -u -r1.61 -r1.62 src/sys/miscfs/genfs/layer_vnops.c
cvs rdiff -u -r1.156 -r1.157 src/sys/miscfs/kernfs/kernfs_vnops.c
cvs rdiff -u -r1.195 -r1.196 src/sys/miscfs/procfs/procfs_vnops.c
cvs rdiff -u -r1.169 -r1.170 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.119 -r1.120 src/sys/nfs/nfs_node.c
cvs rdiff -u -r1.145 -r1.146 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.30 -r1.31 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.86 -r1.87 src/sys/ufs/ext2fs/ext2fs_inode.c
cvs rdiff -u -r1.312 -r1.313 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.17 -r1.18 src/sys/ufs/lfs/ulfs_inode.c
cvs rdiff -u -r1.56 -r1.57 src/sys/ufs/mfs/mfs_vnops.c
cvs rdiff -u -r1.99 -r1.100 src/sys/ufs/ufs/ufs_inode.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/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.23 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.24
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.23	Mon Apr 20 23:03:07 2015
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -5533,7 +5533,7 @@ zfs_netbsd_link(void *v)
 static int
 zfs_netbsd_inactive(void *v)
 {
-	struct vop_inactive_args *ap = v;
+	struct vop_inactive_v2_args *ap = v;
 	vnode_t *vp = ap->a_vp;
 	znode_t	*zp = VTOZ(vp);
 
@@ -5543,7 +5543,7 @@ zfs_netbsd_inactive(void *v)
 	 * vrele() will call us again.
 	 */
 	*ap->a_recycle = (zp->z_unlinked != 0);
-	VOP_UNLOCK(vp);
+
 	return (0);
 }
 

Index: src/lib/libp2k/p2k.c
diff -u src/lib/libp2k/p2k.c:1.68 src/lib/libp2k/p2k.c:1.69
--- src/lib/libp2k/p2k.c:1.68	Mon Jan 25 11:45:58 2016
+++ src/lib/libp2k/p2k.c	Tue Apr 11 14:25:02 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: p2k.c,v 1.68 2016/01/25 11:45:58 pooka Exp $	*/
+/*	$NetBSD: p2k.c,v 1.69 2017/04/11 14:25:02 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2007, 2008, 2009  Antti Kantee.  All Rights Reserved.
@@ -1400,6 +1400,7 @@ p2k_node_inactive(struct puffs_usermount
 	 */
 	RUMP_VOP_LOCK(vp, LK_EXCLUSIVE);
 	rv = RUMP_VOP_INACTIVE(vp, &recycle);
+	RUMP_VOP_UNLOCK(vp);
 	if (recycle) {
 		puffs_setback(puffs_cc_getcc(pu), PUFFS_SETBACK_NOREF_N1);
 		rump_pub_vp_rele(p2n->p2n_vp);

Index: src/share/man/man9/vnodeops.9
diff -u src/share/man/man9/vnodeops.9:1.97 src/share/man/man9/vnodeops.9:1.98
--- src/share/man/man9/vnodeops.9:1.97	Mon Jan 25 18:20:16 2016
+++ src/share/man/man9/vnodeops.9	Tue Apr 11 14:25:02 2017
@@ -1,4 +1,4 @@
-.\"     $NetBSD: vnodeops.9,v 1.97 2016/01/25 18:20:16 christos Exp $
+.\"     $NetBSD: vnodeops.9,v 1.98 2017/04/11 14:25:02 riastradh 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 January 25, 2016
+.Dd April 11, 2017
 .Dt VNODEOPS 9
 .Os
 .Sh NAME
@@ -1102,7 +1102,7 @@ If the operation is successful zero is r
 appropriate error code is returned.
 The vnode
 .Fa vp
-must be locked on entry, and will be unlocked on return.
+must be locked on entry, and will remain locked on return.
 .It Fn VOP_RECLAIM "vp"
 Reclaim the vnode for another file system.
 .Fn VOP_RECLAIM

Index: src/sys/coda/coda_vnops.c
diff -u src/sys/coda/coda_vnops.c:1.103 src/sys/coda/coda_vnops.c:1.104
--- src/sys/coda/coda_vnops.c:1.103	Sat Aug 20 12:37:06 2016
+++ src/sys/coda/coda_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: coda_vnops.c,v 1.103 2016/08/20 12:37:06 hannken Exp $	*/
+/*	$NetBSD: coda_vnops.c,v 1.104 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*
  *
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.103 2016/08/20 12:37:06 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.104 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -827,7 +827,7 @@ int
 coda_inactive(void *v)
 {
 /* true args */
-    struct vop_inactive_args *ap = v;
+    struct vop_inactive_v2_args *ap = v;
     vnode_t *vp = ap->a_vp;
     struct cnode *cp = VTOC(vp);
     kauth_cred_t cred __unused = NULL;
@@ -837,7 +837,6 @@ coda_inactive(void *v)
 
     if (IS_CTL_VP(vp)) {
 	MARK_INT_SAT(CODA_INACTIVE_STATS);
-	VOP_UNLOCK(vp);
 	return 0;
     }
 
@@ -857,7 +856,6 @@ coda_inactive(void *v)
 	printf("%s: %p ovp != NULL\n", __func__, vp);
 #endif
     /* XXX Do we need to VOP_CLOSE container vnodes? */
-    VOP_UNLOCK(vp);
     if (!IS_UNMOUNTING(cp))
 	*ap->a_recycle = true;
 

Index: src/sys/fs/adosfs/advnops.c
diff -u src/sys/fs/adosfs/advnops.c:1.48 src/sys/fs/adosfs/advnops.c:1.49
--- src/sys/fs/adosfs/advnops.c:1.48	Sat Aug 20 12:37:06 2016
+++ src/sys/fs/adosfs/advnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: advnops.c,v 1.48 2016/08/20 12:37:06 hannken Exp $	*/
+/*	$NetBSD: advnops.c,v 1.49 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.48 2016/08/20 12:37:06 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.49 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -843,15 +843,13 @@ adosfs_readlink(void *v)
 int
 adosfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *sp = v;
-	struct vnode *vp = sp->a_vp;
 #ifdef ADOSFS_DIAGNOSTIC
 	advopprint(sp);
 #endif
-	VOP_UNLOCK(vp);
 	/* XXX this needs to check if file was deleted */
 	*sp->a_recycle = true;
 

Index: src/sys/fs/cd9660/cd9660_node.c
diff -u src/sys/fs/cd9660/cd9660_node.c:1.35 src/sys/fs/cd9660/cd9660_node.c:1.36
--- src/sys/fs/cd9660/cd9660_node.c:1.35	Sat Aug 20 12:37:06 2016
+++ src/sys/fs/cd9660/cd9660_node.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_node.c,v 1.35 2016/08/20 12:37:06 hannken Exp $	*/
+/*	$NetBSD: cd9660_node.c,v 1.36 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1994
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_node.c,v 1.35 2016/08/20 12:37:06 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_node.c,v 1.36 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -102,7 +102,7 @@ cd9660_done(void)
 int
 cd9660_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -116,7 +116,6 @@ cd9660_inactive(void *v)
 	 */
 	ip->i_flag = 0;
 	*ap->a_recycle = (ip->inode.iso_mode == 0);
-	VOP_UNLOCK(vp);
 	return error;
 }
 

Index: src/sys/fs/efs/efs_vnops.c
diff -u src/sys/fs/efs/efs_vnops.c:1.36 src/sys/fs/efs/efs_vnops.c:1.37
--- src/sys/fs/efs/efs_vnops.c:1.36	Sat Aug 20 12:37:07 2016
+++ src/sys/fs/efs/efs_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: efs_vnops.c,v 1.36 2016/08/20 12:37:07 hannken Exp $	*/
+/*	$NetBSD: efs_vnops.c,v 1.37 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2006 Stephen M. Rumble <rum...@ephemeral.org>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.36 2016/08/20 12:37:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_vnops.c,v 1.37 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -560,7 +560,7 @@ efs_readlink(void *v)
 static int
 efs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		const struct vnodeop_desc *a_desc;
 		struct vnode *a_vp;
 		bool *a_recycle
@@ -568,7 +568,6 @@ efs_inactive(void *v)
 	struct efs_inode *eip = EFS_VTOI(ap->a_vp);
 
 	*ap->a_recycle = (eip->ei_mode == 0);
-	VOP_UNLOCK(ap->a_vp);
 
 	return (0);
 }

Index: src/sys/fs/filecorefs/filecore_node.c
diff -u src/sys/fs/filecorefs/filecore_node.c:1.28 src/sys/fs/filecorefs/filecore_node.c:1.29
--- src/sys/fs/filecorefs/filecore_node.c:1.28	Sat Aug 20 12:37:07 2016
+++ src/sys/fs/filecorefs/filecore_node.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecore_node.c,v 1.28 2016/08/20 12:37:07 hannken Exp $	*/
+/*	$NetBSD: filecore_node.c,v 1.29 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1994
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: filecore_node.c,v 1.28 2016/08/20 12:37:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_node.c,v 1.29 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -213,7 +213,7 @@ filecore_loadvnode(struct mount *mp, str
 int
 filecore_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -227,7 +227,7 @@ filecore_inactive(void *v)
 	 */
 	ip->i_flag = 0;
 	*ap->a_recycle = (filecore_staleinode(ip) != 0);
-	VOP_UNLOCK(vp);
+
 	return error;
 }
 

Index: src/sys/fs/msdosfs/msdosfs_denode.c
diff -u src/sys/fs/msdosfs/msdosfs_denode.c:1.53 src/sys/fs/msdosfs/msdosfs_denode.c:1.54
--- src/sys/fs/msdosfs/msdosfs_denode.c:1.53	Wed Mar  1 10:41:28 2017
+++ src/sys/fs/msdosfs/msdosfs_denode.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_denode.c,v 1.53 2017/03/01 10:41:28 hannken Exp $	*/
+/*	$NetBSD: msdosfs_denode.c,v 1.54 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*-
  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_denode.c,v 1.53 2017/03/01 10:41:28 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_denode.c,v 1.54 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -569,7 +569,7 @@ msdosfs_reclaim(void *v)
 int
 msdosfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -616,7 +616,7 @@ out:
 		vp->v_usecount, dep->de_Name[0]);
 #endif
 	*ap->a_recycle = (dep->de_Name[0] == SLOT_DELETED);
-	VOP_UNLOCK(vp);
+
 	return (error);
 }
 

Index: src/sys/fs/nilfs/nilfs_vnops.c
diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.33 src/sys/fs/nilfs/nilfs_vnops.c:1.34
--- src/sys/fs/nilfs/nilfs_vnops.c:1.33	Sat Aug 20 12:37:07 2016
+++ src/sys/fs/nilfs/nilfs_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: nilfs_vnops.c,v 1.33 2016/08/20 12:37:07 hannken Exp $ */
+/* $NetBSD: nilfs_vnops.c,v 1.34 2017/04/11 14:24:59 riastradh Exp $ */
 
 /*
  * Copyright (c) 2008, 2009 Reinoud Zandijk
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.33 2016/08/20 12:37:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.34 2017/04/11 14:24:59 riastradh Exp $");
 #endif /* not lint */
 
 
@@ -70,7 +70,7 @@ extern int prtactive;
 int
 nilfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool         *a_recycle;
 	} */ *ap = v;
@@ -90,7 +90,6 @@ nilfs_inactive(void *v)
 	 * referenced anymore in a directory we ought to free up the resources
 	 * on disc if applicable.
 	 */
-	VOP_UNLOCK(vp);
 
 	return 0;
 }

Index: src/sys/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.60 src/sys/fs/ntfs/ntfs_vnops.c:1.61
--- src/sys/fs/ntfs/ntfs_vnops.c:1.60	Sat Aug 20 12:37:07 2016
+++ src/sys/fs/ntfs/ntfs_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.60 2016/08/20 12:37:07 hannken Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.61 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.60 2016/08/20 12:37:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.61 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -205,10 +205,11 @@ ntfs_getattr(void *v)
 int
 ntfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
+		bool *a_recycle;
 	} */ *ap = v;
-	struct vnode *vp = ap->a_vp;
+	struct vnode *vp __unused = ap->a_vp;
 #ifdef NTFS_DEBUG
 	struct ntnode *ip = VTONT(vp);
 #endif
@@ -216,8 +217,6 @@ ntfs_inactive(void *v)
 	dprintf(("ntfs_inactive: vnode: %p, ntnode: %llu\n", vp,
 	    (unsigned long long)ip->i_number));
 
-	VOP_UNLOCK(vp);
-
 	/* XXX since we don't support any filesystem changes
 	 * right now, nothing more needs to be done
 	 */

Index: src/sys/fs/ptyfs/ptyfs_vnops.c
diff -u src/sys/fs/ptyfs/ptyfs_vnops.c:1.52 src/sys/fs/ptyfs/ptyfs_vnops.c:1.53
--- src/sys/fs/ptyfs/ptyfs_vnops.c:1.52	Sat Aug 20 12:37:07 2016
+++ src/sys/fs/ptyfs/ptyfs_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ptyfs_vnops.c,v 1.52 2016/08/20 12:37:07 hannken Exp $	*/
+/*	$NetBSD: ptyfs_vnops.c,v 1.53 2017/04/11 14:24:59 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1993, 1995
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.52 2016/08/20 12:37:07 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.53 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -231,7 +231,7 @@ ptyfs_reclaim(void *v)
 int
 ptyfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -240,7 +240,7 @@ ptyfs_inactive(void *v)
 
 	if (ptyfs->ptyfs_type == PTYFSptc)
 		ptyfs_clr_active(vp->v_mount, ptyfs->ptyfs_pty);
-	VOP_UNLOCK(vp);
+
 	return 0;
 }
 

Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.208 src/sys/fs/puffs/puffs_vnops.c:1.209
--- src/sys/fs/puffs/puffs_vnops.c:1.208	Sat Apr  8 08:49:44 2017
+++ src/sys/fs/puffs/puffs_vnops.c	Tue Apr 11 14:24:59 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffs_vnops.c,v 1.208 2017/04/08 08:49:44 hannken Exp $	*/
+/*	$NetBSD: puffs_vnops.c,v 1.209 2017/04/11 14:24:59 riastradh 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.208 2017/04/08 08:49:44 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.209 2017/04/11 14:24:59 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -1311,7 +1311,7 @@ callinactive(struct puffs_mount *pmp, pu
 int
 puffs_vnop_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		const struct vnodeop_desc *a_desc;
 		struct vnode *a_vp;
 	} */ *ap = v;
@@ -1329,7 +1329,6 @@ puffs_vnop_inactive(void *v)
 	 * cookie was stall and the node likely already reclaimed. 
 	 */
 	if (vp->v_type == VNON) {
-		VOP_UNLOCK(vp);
 		return 0;
 	}
 
@@ -1415,7 +1414,6 @@ puffs_vnop_inactive(void *v)
 	*ap->a_recycle = recycle;
 
 	mutex_exit(&pnode->pn_sizemtx);
-	VOP_UNLOCK(vp);
 
 	return 0;
 }

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.54 src/sys/fs/smbfs/smbfs_node.c:1.55
--- src/sys/fs/smbfs/smbfs_node.c:1.54	Sat Aug 20 12:37:08 2016
+++ src/sys/fs/smbfs/smbfs_node.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.54 2016/08/20 12:37:08 hannken Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.55 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.54 2016/08/20 12:37:08 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.55 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -259,7 +259,7 @@ smbfs_reclaim(void *v)
 int
 smbfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -289,7 +289,6 @@ smbfs_inactive(void *v)
 		smbfs_attr_cacheremove(vp);
 	}
 	*ap->a_recycle = ((vp->v_type == VNON) || (np->n_flag & NGONE) != 0);
-	VOP_UNLOCK(vp);
 
 	return (0);
 }

Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.60 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.61
--- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.60	Sat Aug 20 12:37:08 2016
+++ src/sys/fs/sysvbfs/sysvbfs_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysvbfs_vnops.c,v 1.60 2016/08/20 12:37:08 hannken Exp $	*/
+/*	$NetBSD: sysvbfs_vnops.c,v 1.61 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.60 2016/08/20 12:37:08 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.61 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -676,7 +676,7 @@ sysvbfs_readdir(void *v)
 int
 sysvbfs_inactive(void *arg)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *a = arg;
@@ -688,7 +688,6 @@ sysvbfs_inactive(void *arg)
 		*a->a_recycle = true;
 	else
 		*a->a_recycle = false;
-	VOP_UNLOCK(v);
 
 	return 0;
 }

Index: src/sys/fs/tmpfs/tmpfs_vnops.c
diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.130 src/sys/fs/tmpfs/tmpfs_vnops.c:1.131
--- src/sys/fs/tmpfs/tmpfs_vnops.c:1.130	Thu Mar 30 09:09:26 2017
+++ src/sys/fs/tmpfs/tmpfs_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tmpfs_vnops.c,v 1.130 2017/03/30 09:09:26 hannken Exp $	*/
+/*	$NetBSD: tmpfs_vnops.c,v 1.131 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.130 2017/03/30 09:09:26 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.131 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/dirent.h>
@@ -1035,7 +1035,7 @@ tmpfs_readlink(void *v)
 int
 tmpfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -1054,7 +1054,6 @@ tmpfs_inactive(void *v)
 	} else {
 		*ap->a_recycle = false;
 	}
-	VOP_UNLOCK(vp);
 
 	return 0;
 }

Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.102 src/sys/fs/udf/udf_vnops.c:1.103
--- src/sys/fs/udf/udf_vnops.c:1.102	Sat Aug 20 12:37:08 2016
+++ src/sys/fs/udf/udf_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.102 2016/08/20 12:37:08 hannken Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.103 2017/04/11 14:25:00 riastradh Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.102 2016/08/20 12:37:08 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.103 2017/04/11 14:25:00 riastradh Exp $");
 #endif /* not lint */
 
 
@@ -80,7 +80,7 @@ extern int prtactive;
 int
 udf_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool         *a_recycle;
 	} */ *ap = v;
@@ -92,7 +92,6 @@ udf_inactive(void *v)
 
 	if (udf_node == NULL) {
 		DPRINTF(NODE, ("udf_inactive: inactive NULL UDF node\n"));
-		VOP_UNLOCK(vp);
 		return 0;
 	}
 
@@ -115,14 +114,12 @@ udf_inactive(void *v)
 	*ap->a_recycle = false;
 	if ((refcnt == 0) && ((vp->v_vflag & VV_SYSTEM) == 0)) {
 		*ap->a_recycle = true;
-		VOP_UNLOCK(vp);
 		return 0;
 	}
 
 	/* write out its node */
 	if (udf_node->i_flags & (IN_CHANGE | IN_UPDATE | IN_MODIFIED))
 		udf_update(vp, NULL, NULL, NULL, 0);
-	VOP_UNLOCK(vp);
 
 	return 0;
 }

Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.64 src/sys/fs/union/union_vnops.c:1.65
--- src/sys/fs/union/union_vnops.c:1.64	Mon Mar  6 10:08:49 2017
+++ src/sys/fs/union/union_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: union_vnops.c,v 1.64 2017/03/06 10:08:49 hannken Exp $	*/
+/*	$NetBSD: union_vnops.c,v 1.65 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.64 2017/03/06 10:08:49 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.65 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1558,7 +1558,7 @@ union_abortop(void *v)
 int
 union_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		const struct vnodeop_desc *a_desc;
 		struct vnode *a_vp;
 		bool *a_recycle;
@@ -1588,7 +1588,6 @@ union_inactive(void *v)
 	}
 
 	*ap->a_recycle = ((un->un_cflags & UN_CACHED) == 0);
-	VOP_UNLOCK(vp);
 
 	return (0);
 }

Index: src/sys/fs/unionfs/unionfs_vnops.c
diff -u src/sys/fs/unionfs/unionfs_vnops.c:1.9 src/sys/fs/unionfs/unionfs_vnops.c:1.10
--- src/sys/fs/unionfs/unionfs_vnops.c:1.9	Mon Apr 20 23:03:08 2015
+++ src/sys/fs/unionfs/unionfs_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1466,9 +1466,8 @@ unionfs_readlink(void *v)
 static int
 unionfs_inactive(void *v)
 {
-	struct vop_inactive_args *ap = v;
+	struct vop_inactive_v2_args *ap = v;
 	*ap->a_recycle = true;
-	VOP_UNLOCK(ap->a_vp);
 	return (0);
 }
 

Index: src/sys/fs/v7fs/v7fs_vnops.c
diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.23 src/sys/fs/v7fs/v7fs_vnops.c:1.24
--- src/sys/fs/v7fs/v7fs_vnops.c:1.23	Sat Apr  8 08:51:02 2017
+++ src/sys/fs/v7fs/v7fs_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: v7fs_vnops.c,v 1.23 2017/04/08 08:51:02 hannken Exp $	*/
+/*	$NetBSD: v7fs_vnops.c,v 1.24 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.23 2017/04/08 08:51:02 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.24 2017/04/11 14:25:00 riastradh Exp $");
 #if defined _KERNEL_OPT
 #include "opt_v7fs.h"
 #endif
@@ -1010,7 +1010,7 @@ v7fs_readdir(void *v)
 int
 v7fs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 				    struct vnode *a_vp;
 				    bool *a_recycle;
 				    } */ *a = v;
@@ -1026,8 +1026,6 @@ v7fs_inactive(void *v)
 		*a->a_recycle = true;
 	}
 
-	VOP_UNLOCK(vp);
-
 	return 0;
 }
 

Index: src/sys/kern/vfs_vnode.c
diff -u src/sys/kern/vfs_vnode.c:1.81 src/sys/kern/vfs_vnode.c:1.82
--- src/sys/kern/vfs_vnode.c:1.81	Thu Mar 30 09:16:52 2017
+++ src/sys/kern/vfs_vnode.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_vnode.c,v 1.81 2017/03/30 09:16:52 hannken Exp $	*/
+/*	$NetBSD: vfs_vnode.c,v 1.82 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -156,7 +156,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.81 2017/03/30 09:16:52 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.82 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -761,10 +761,11 @@ vrelel(vnode_t *vp, int flags)
 		 * the described file has been deleted, then recycle
 		 * the vnode.
 		 *
-		 * Note that VOP_INACTIVE() will drop the vnode lock.
+		 * Note that VOP_INACTIVE() will not drop the vnode lock.
 		 */
 		recycle = false;
 		VOP_INACTIVE(vp, &recycle);
+		VOP_UNLOCK(vp);
 		if (recycle) {
 			/* vcache_reclaim() below will drop the lock. */
 			if (vn_lock(vp, LK_EXCLUSIVE) != 0)
@@ -1553,9 +1554,10 @@ vcache_reclaim(vnode_t *vp)
 
 	/*
 	 * Disassociate the underlying file system from the vnode.
-	 * Note that the VOP_INACTIVE will unlock the vnode.
+	 * Note that the VOP_INACTIVE will not unlock the vnode.
 	 */
 	VOP_INACTIVE(vp, &recycle);
+	VOP_UNLOCK(vp);
 	if (VOP_RECLAIM(vp)) {
 		vnpanic(vp, "%s: cannot reclaim", __func__);
 	}

Index: src/sys/kern/vnode_if.src
diff -u src/sys/kern/vnode_if.src:1.70 src/sys/kern/vnode_if.src:1.71
--- src/sys/kern/vnode_if.src:1.70	Wed Feb 22 09:45:51 2017
+++ src/sys/kern/vnode_if.src	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: vnode_if.src,v 1.70 2017/02/22 09:45:51 hannken Exp $
+#	$NetBSD: vnode_if.src,v 1.71 2017/04/11 14:25:00 riastradh Exp $
 #
 # Copyright (c) 1992, 1993
 #	The Regents of the University of California.  All rights reserved.
@@ -384,10 +384,11 @@ vop_abortop {
 };
 
 #
-#% inactive   vp      L U U  
+#% inactive   vp      L L L
 #
 vop_inactive {
-	IN LOCKED=YES WILLUNLOCK struct vnode *vp;
+	VERSION 2
+	IN LOCKED=YES struct vnode *vp;
 	INOUT bool *recycle;
 };
 

Index: src/sys/miscfs/deadfs/dead_vnops.c
diff -u src/sys/miscfs/deadfs/dead_vnops.c:1.59 src/sys/miscfs/deadfs/dead_vnops.c:1.60
--- src/sys/miscfs/deadfs/dead_vnops.c:1.59	Mon Apr 20 23:30:58 2015
+++ src/sys/miscfs/deadfs/dead_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: dead_vnops.c,v 1.59 2015/04/20 23:30:58 riastradh Exp $	*/
+/*	$NetBSD: dead_vnops.c,v 1.60 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.59 2015/04/20 23:30:58 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.60 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -301,13 +301,12 @@ dead_rmdir(void *v)
 int
 dead_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
 
 	*ap->a_recycle = false;
-	VOP_UNLOCK(ap->a_vp);
 
 	return 0;
 }

Index: src/sys/miscfs/fdesc/fdesc_vnops.c
diff -u src/sys/miscfs/fdesc/fdesc_vnops.c:1.127 src/sys/miscfs/fdesc/fdesc_vnops.c:1.128
--- src/sys/miscfs/fdesc/fdesc_vnops.c:1.127	Sat Aug 20 12:37:08 2016
+++ src/sys/miscfs/fdesc/fdesc_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdesc_vnops.c,v 1.127 2016/08/20 12:37:08 hannken Exp $	*/
+/*	$NetBSD: fdesc_vnops.c,v 1.128 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.127 2016/08/20 12:37:08 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.128 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -836,7 +836,7 @@ fdesc_kqfilter(void *v)
 int
 fdesc_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
@@ -848,7 +848,7 @@ fdesc_inactive(void *v)
 	 */
 	if (fd->fd_type == Fctty || fd->fd_type == Fdesc)
 		vp->v_type = VNON;
-	VOP_UNLOCK(vp);
+
 	return (0);
 }
 

Index: src/sys/miscfs/fifofs/fifo_vnops.c
diff -u src/sys/miscfs/fifofs/fifo_vnops.c:1.77 src/sys/miscfs/fifofs/fifo_vnops.c:1.78
--- src/sys/miscfs/fifofs/fifo_vnops.c:1.77	Sat Aug  9 05:33:01 2014
+++ src/sys/miscfs/fifofs/fifo_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: fifo_vnops.c,v 1.77 2014/08/09 05:33:01 rtr Exp $	*/
+/*	$NetBSD: fifo_vnops.c,v 1.78 2017/04/11 14:25:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fifo_vnops.c,v 1.77 2014/08/09 05:33:01 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fifo_vnops.c,v 1.78 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -360,12 +360,11 @@ fifo_poll(void *v)
 static int
 fifo_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode	*a_vp;
 		struct lwp	*a_l;
-	} */ *ap = v;
+	} */ *ap __unused = v;
 
-	VOP_UNLOCK(ap->a_vp);
 	return (0);
 }
 

Index: src/sys/miscfs/genfs/layer_vnops.c
diff -u src/sys/miscfs/genfs/layer_vnops.c:1.61 src/sys/miscfs/genfs/layer_vnops.c:1.62
--- src/sys/miscfs/genfs/layer_vnops.c:1.61	Thu Mar 30 09:16:52 2017
+++ src/sys/miscfs/genfs/layer_vnops.c	Tue Apr 11 14:25:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_vnops.c,v 1.61 2017/03/30 09:16:52 hannken Exp $	*/
+/*	$NetBSD: layer_vnops.c,v 1.62 2017/04/11 14:25:00 riastradh 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.61 2017/03/30 09:16:52 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.62 2017/04/11 14:25:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -579,7 +579,7 @@ layer_fsync(void *v)
 int
 layer_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -602,7 +602,7 @@ layer_inactive(void *v)
 	 * like they do in the name lookup cache code.
 	 * That's too much work for now.
 	 */
-	VOP_UNLOCK(vp);
+
 	return 0;
 }
 

Index: src/sys/miscfs/kernfs/kernfs_vnops.c
diff -u src/sys/miscfs/kernfs/kernfs_vnops.c:1.156 src/sys/miscfs/kernfs/kernfs_vnops.c:1.157
--- src/sys/miscfs/kernfs/kernfs_vnops.c:1.156	Sat Aug 20 12:37:09 2016
+++ src/sys/miscfs/kernfs/kernfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernfs_vnops.c,v 1.156 2016/08/20 12:37:09 hannken Exp $	*/
+/*	$NetBSD: kernfs_vnops.c,v 1.157 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.156 2016/08/20 12:37:09 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.157 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1061,14 +1061,13 @@ kernfs_readdir(void *v)
 int
 kernfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
-	struct vnode *vp = ap->a_vp;
 
 	*ap->a_recycle = false;
-	VOP_UNLOCK(vp);
+
 	return (0);
 }
 

Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.195 src/sys/miscfs/procfs/procfs_vnops.c:1.196
--- src/sys/miscfs/procfs/procfs_vnops.c:1.195	Thu Mar 30 20:16:29 2017
+++ src/sys/miscfs/procfs/procfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: procfs_vnops.c,v 1.195 2017/03/30 20:16:29 christos Exp $	*/
+/*	$NetBSD: procfs_vnops.c,v 1.196 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.195 2017/03/30 20:16:29 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.196 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -414,7 +414,7 @@ procfs_close(void *v)
 int
 procfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -425,8 +425,6 @@ procfs_inactive(void *v)
 	*ap->a_recycle = (proc_find(pfs->pfs_pid) == NULL);
 	mutex_exit(proc_lock);
 
-	VOP_UNLOCK(vp);
-
 	return (0);
 }
 

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.169 src/sys/miscfs/specfs/spec_vnops.c:1.170
--- src/sys/miscfs/specfs/spec_vnops.c:1.169	Wed Mar  1 10:46:05 2017
+++ src/sys/miscfs/specfs/spec_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.169 2017/03/01 10:46:05 hannken Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.170 2017/04/11 14:25:01 riastradh 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.169 2017/03/01 10:46:05 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.170 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -1082,7 +1082,7 @@ out:
 int
 spec_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		struct bool *a_recycle;
 	} */ *ap = v;
@@ -1090,7 +1090,7 @@ spec_inactive(void *v)
 
 	KASSERT(vp->v_mount == dead_rootmount);
 	*ap->a_recycle = true;
-	VOP_UNLOCK(vp);
+
 	return 0;
 }
 

Index: src/sys/nfs/nfs_node.c
diff -u src/sys/nfs/nfs_node.c:1.119 src/sys/nfs/nfs_node.c:1.120
--- src/sys/nfs/nfs_node.c:1.119	Sat Aug 20 12:37:09 2016
+++ src/sys/nfs/nfs_node.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: nfs_node.c,v 1.119 2016/08/20 12:37:09 hannken Exp $	*/
+/*	$NetBSD: nfs_node.c,v 1.120 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_node.c,v 1.119 2016/08/20 12:37:09 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_node.c,v 1.120 2017/04/11 14:25:01 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_nfs.h"
@@ -179,7 +179,7 @@ nfs_nget1(struct mount *mntp, nfsfh_t *f
 int
 nfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -203,8 +203,6 @@ nfs_inactive(void *v)
 		nfs_invaldircache(vp,
 		    NFS_INVALDIRCACHE_FORCE | NFS_INVALDIRCACHE_KEEPEOF);
 
-	VOP_UNLOCK(vp);
-
 	if (sp != NULL) {
 		workqueue_enqueue(nfs_sillyworkq, &sp->s_work, NULL);
 	}

Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.145 src/sys/rump/librump/rumpvfs/rumpfs.c:1.146
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.145	Wed Mar  1 10:44:47 2017
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.145 2017/03/01 10:44:47 hannken Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.146 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.145 2017/03/01 10:44:47 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.146 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -1592,7 +1592,7 @@ rump_vop_success(void *v)
 static int
 rump_vop_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -1611,7 +1611,6 @@ rump_vop_inactive(void *v)
 	}
 	*ap->a_recycle = (rn->rn_flags & RUMPNODE_CANRECLAIM) ? true : false;
 
-	VOP_UNLOCK(vp);
 	return 0;
 }
 

Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.30 src/sys/ufs/chfs/chfs_vnops.c:1.31
--- src/sys/ufs/chfs/chfs_vnops.c:1.30	Thu Mar 30 09:10:46 2017
+++ src/sys/ufs/chfs/chfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vnops.c,v 1.30 2017/03/30 09:10:46 hannken Exp $	*/
+/*	$NetBSD: chfs_vnops.c,v 1.31 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -1452,7 +1452,7 @@ chfs_readlink(void *v)
 int
 chfs_inactive(void *v)
 {
-	struct vnode *vp = ((struct vop_inactive_args *) v)->a_vp;
+	struct vnode *vp = ((struct vop_inactive_v2_args *) v)->a_vp;
 	struct chfs_inode *ip = VTOI(vp);
 	struct chfs_vnode_cache *chvc;
 	dbg("inactive | vno: %llu\n", (unsigned long long)ip->ino);
@@ -1463,13 +1463,11 @@ chfs_inactive(void *v)
 	if (ip->ino) {
 		chvc = ip->chvc;
 		if (chvc->nlink)
-			*((struct vop_inactive_args *) v)->a_recycle = 0;
+			*((struct vop_inactive_v2_args *) v)->a_recycle = 0;
 	} else {
-		*((struct vop_inactive_args *) v)->a_recycle = 1;
+		*((struct vop_inactive_v2_args *) v)->a_recycle = 1;
 	}
 
-	VOP_UNLOCK(vp);
-
 	return 0;
 }
 

Index: src/sys/ufs/ext2fs/ext2fs_inode.c
diff -u src/sys/ufs/ext2fs/ext2fs_inode.c:1.86 src/sys/ufs/ext2fs/ext2fs_inode.c:1.87
--- src/sys/ufs/ext2fs/ext2fs_inode.c:1.86	Sun Aug 14 11:44:54 2016
+++ src/sys/ufs/ext2fs/ext2fs_inode.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_inode.c,v 1.86 2016/08/14 11:44:54 jdolecek Exp $	*/
+/*	$NetBSD: ext2fs_inode.c,v 1.87 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_inode.c,v 1.86 2016/08/14 11:44:54 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_inode.c,v 1.87 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -190,7 +190,7 @@ ext2fs_setnblock(struct inode *ip, uint6
 int
 ext2fs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		bool *a_recycle;
 	} */ *ap = v;
@@ -223,7 +223,7 @@ out:
 	 * so that it can be reused immediately.
 	 */
 	*ap->a_recycle = (ip->i_e2fs_dtime != 0);
-	VOP_UNLOCK(vp);
+
 	return error;
 }
 

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.312 src/sys/ufs/lfs/lfs_vnops.c:1.313
--- src/sys/ufs/lfs/lfs_vnops.c:1.312	Tue Apr 11 06:01:03 2017
+++ src/sys/ufs/lfs/lfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.312 2017/04/11 06:01:03 riastradh Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.313 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.312 2017/04/11 06:01:03 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.313 2017/04/11 14:25:01 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -519,8 +519,9 @@ out:
 int
 lfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
+		bool *a_recycle;
 	} */ *ap = v;
 
 	KASSERT(VOP_ISLOCKED(ap->a_vp) == LK_EXCLUSIVE);
@@ -535,7 +536,6 @@ lfs_inactive(void *v)
 		mutex_enter(&lfs_lock);
 		LFS_CLR_UINO(VTOI(ap->a_vp), IN_ALLMOD);
 		mutex_exit(&lfs_lock);
-		VOP_UNLOCK(ap->a_vp);
 		return 0;
 	}
 

Index: src/sys/ufs/lfs/ulfs_inode.c
diff -u src/sys/ufs/lfs/ulfs_inode.c:1.17 src/sys/ufs/lfs/ulfs_inode.c:1.18
--- src/sys/ufs/lfs/ulfs_inode.c:1.17	Thu Mar 30 09:10:08 2017
+++ src/sys/ufs/lfs/ulfs_inode.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_inode.c,v 1.17 2017/03/30 09:10:08 hannken Exp $	*/
+/*	$NetBSD: ulfs_inode.c,v 1.18 2017/04/11 14:25:01 riastradh Exp $	*/
 /*  from NetBSD: ufs_inode.c,v 1.95 2015/06/13 14:56:45 hannken Exp  */
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_inode.c,v 1.17 2017/03/30 09:10:08 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_inode.c,v 1.18 2017/04/11 14:25:01 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -79,7 +79,7 @@ extern int prtactive;
 int
 ulfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		struct bool *a_recycle;
 	} */ *ap = v;
@@ -124,7 +124,7 @@ out:
 	 * so that it can be reused immediately.
 	 */
 	*ap->a_recycle = (ip->i_mode == 0);
-	VOP_UNLOCK(vp);
+
 	return (error);
 }
 

Index: src/sys/ufs/mfs/mfs_vnops.c
diff -u src/sys/ufs/mfs/mfs_vnops.c:1.56 src/sys/ufs/mfs/mfs_vnops.c:1.57
--- src/sys/ufs/mfs/mfs_vnops.c:1.56	Wed Jan 14 11:21:31 2015
+++ src/sys/ufs/mfs/mfs_vnops.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfs_vnops.c,v 1.56 2015/01/14 11:21:31 hannken Exp $	*/
+/*	$NetBSD: mfs_vnops.c,v 1.57 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.56 2015/01/14 11:21:31 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.57 2017/04/11 14:25:01 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -271,7 +271,7 @@ mfs_close(void *v)
 int
 mfs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;

Index: src/sys/ufs/ufs/ufs_inode.c
diff -u src/sys/ufs/ufs/ufs_inode.c:1.99 src/sys/ufs/ufs/ufs_inode.c:1.100
--- src/sys/ufs/ufs/ufs_inode.c:1.99	Wed Mar  1 10:42:45 2017
+++ src/sys/ufs/ufs/ufs_inode.c	Tue Apr 11 14:25:01 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_inode.c,v 1.99 2017/03/01 10:42:45 hannken Exp $	*/
+/*	$NetBSD: ufs_inode.c,v 1.100 2017/04/11 14:25:01 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.99 2017/03/01 10:42:45 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.100 2017/04/11 14:25:01 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -77,7 +77,7 @@ extern int prtactive;
 int
 ufs_inactive(void *v)
 {
-	struct vop_inactive_args /* {
+	struct vop_inactive_v2_args /* {
 		struct vnode *a_vp;
 		struct bool *a_recycle;
 	} */ *ap = v;
@@ -150,7 +150,7 @@ out:
 	 * so that it can be reused immediately.
 	 */
 	*ap->a_recycle = (ip->i_mode == 0);
-	VOP_UNLOCK(vp);
+
 	return (allerror);
 }
 

Reply via email to