Index: sys/coda/coda_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/coda/coda_vnops.c,v
retrieving revision 1.103
diff -p -u -r1.103 coda_vnops.c
--- sys/coda/coda_vnops.c	20 Aug 2016 12:37:06 -0000	1.103
+++ sys/coda/coda_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/adosfs/advnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/adosfs/advnops.c,v
retrieving revision 1.48
diff -p -u -r1.48 advnops.c
--- sys/fs/adosfs/advnops.c	20 Aug 2016 12:37:06 -0000	1.48
+++ sys/fs/adosfs/advnops.c	11 Apr 2017 05:57:51 -0000
@@ -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: sys/fs/cd9660/cd9660_node.c
===================================================================
RCS file: /cvsroot/src/sys/fs/cd9660/cd9660_node.c,v
retrieving revision 1.35
diff -p -u -r1.35 cd9660_node.c
--- sys/fs/cd9660/cd9660_node.c	20 Aug 2016 12:37:06 -0000	1.35
+++ sys/fs/cd9660/cd9660_node.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/efs/efs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/efs/efs_vnops.c,v
retrieving revision 1.36
diff -p -u -r1.36 efs_vnops.c
--- sys/fs/efs/efs_vnops.c	20 Aug 2016 12:37:07 -0000	1.36
+++ sys/fs/efs/efs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/filecorefs/filecore_node.c
===================================================================
RCS file: /cvsroot/src/sys/fs/filecorefs/filecore_node.c,v
retrieving revision 1.28
diff -p -u -r1.28 filecore_node.c
--- sys/fs/filecorefs/filecore_node.c	20 Aug 2016 12:37:07 -0000	1.28
+++ sys/fs/filecorefs/filecore_node.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/msdosfs/msdosfs_denode.c
===================================================================
RCS file: /cvsroot/src/sys/fs/msdosfs/msdosfs_denode.c,v
retrieving revision 1.53
diff -p -u -r1.53 msdosfs_denode.c
--- sys/fs/msdosfs/msdosfs_denode.c	1 Mar 2017 10:41:28 -0000	1.53
+++ sys/fs/msdosfs/msdosfs_denode.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/nilfs/nilfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/nilfs/nilfs_vnops.c,v
retrieving revision 1.33
diff -p -u -r1.33 nilfs_vnops.c
--- sys/fs/nilfs/nilfs_vnops.c	20 Aug 2016 12:37:07 -0000	1.33
+++ sys/fs/nilfs/nilfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/ntfs/ntfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/ntfs/ntfs_vnops.c,v
retrieving revision 1.60
diff -p -u -r1.60 ntfs_vnops.c
--- sys/fs/ntfs/ntfs_vnops.c	20 Aug 2016 12:37:07 -0000	1.60
+++ sys/fs/ntfs/ntfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/ptyfs/ptyfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/ptyfs/ptyfs_vnops.c,v
retrieving revision 1.52
diff -p -u -r1.52 ptyfs_vnops.c
--- sys/fs/ptyfs/ptyfs_vnops.c	20 Aug 2016 12:37:07 -0000	1.52
+++ sys/fs/ptyfs/ptyfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/puffs/puffs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/puffs/puffs_vnops.c,v
retrieving revision 1.208
diff -p -u -r1.208 puffs_vnops.c
--- sys/fs/puffs/puffs_vnops.c	8 Apr 2017 08:49:44 -0000	1.208
+++ sys/fs/puffs/puffs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/smbfs/smbfs_node.c
===================================================================
RCS file: /cvsroot/src/sys/fs/smbfs/smbfs_node.c,v
retrieving revision 1.54
diff -p -u -r1.54 smbfs_node.c
--- sys/fs/smbfs/smbfs_node.c	20 Aug 2016 12:37:08 -0000	1.54
+++ sys/fs/smbfs/smbfs_node.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/sysvbfs/sysvbfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/sysvbfs/sysvbfs_vnops.c,v
retrieving revision 1.60
diff -p -u -r1.60 sysvbfs_vnops.c
--- sys/fs/sysvbfs/sysvbfs_vnops.c	20 Aug 2016 12:37:08 -0000	1.60
+++ sys/fs/sysvbfs/sysvbfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/tmpfs/tmpfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/tmpfs/tmpfs_vnops.c,v
retrieving revision 1.130
diff -p -u -r1.130 tmpfs_vnops.c
--- sys/fs/tmpfs/tmpfs_vnops.c	30 Mar 2017 09:09:26 -0000	1.130
+++ sys/fs/tmpfs/tmpfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/udf/udf_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/udf/udf_vnops.c,v
retrieving revision 1.102
diff -p -u -r1.102 udf_vnops.c
--- sys/fs/udf/udf_vnops.c	20 Aug 2016 12:37:08 -0000	1.102
+++ sys/fs/udf/udf_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/union/union_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/union/union_vnops.c,v
retrieving revision 1.64
diff -p -u -r1.64 union_vnops.c
--- sys/fs/union/union_vnops.c	6 Mar 2017 10:08:49 -0000	1.64
+++ sys/fs/union/union_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/unionfs/unionfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/unionfs/unionfs_vnops.c,v
retrieving revision 1.9
diff -p -u -r1.9 unionfs_vnops.c
--- sys/fs/unionfs/unionfs_vnops.c	20 Apr 2015 23:03:08 -0000	1.9
+++ sys/fs/unionfs/unionfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/fs/v7fs/v7fs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/v7fs/v7fs_vnops.c,v
retrieving revision 1.23
diff -p -u -r1.23 v7fs_vnops.c
--- sys/fs/v7fs/v7fs_vnops.c	8 Apr 2017 08:51:02 -0000	1.23
+++ sys/fs/v7fs/v7fs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/kern/vfs_vnode.c
===================================================================
RCS file: /cvsroot/src/sys/kern/vfs_vnode.c,v
retrieving revision 1.81
diff -p -u -r1.81 vfs_vnode.c
--- sys/kern/vfs_vnode.c	30 Mar 2017 09:16:52 -0000	1.81
+++ sys/kern/vfs_vnode.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/kern/vnode_if.c
===================================================================
RCS file: /cvsroot/src/sys/kern/vnode_if.c,v
retrieving revision 1.97
diff -p -u -r1.97 vnode_if.c
--- sys/kern/vnode_if.c	22 Feb 2017 09:47:18 -0000	1.97
+++ sys/kern/vnode_if.c	11 Apr 2017 05:52:03 -0000
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnode_if.c,v 1.97 2017/02/22 09:47:18 hannken Exp $	*/
+/*	$NetBSD$	*/
 
 /*
  * Warning: DO NOT EDIT! This file is automatically generated!
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.97 2017/02/22 09:47:18 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD$");
 
 #include <sys/param.h>
 #include <sys/mount.h>
@@ -1103,13 +1103,13 @@ VOP_ABORTOP(struct vnode *dvp,
 }
 
 const int vop_inactive_vp_offsets[] = {
-	VOPARG_OFFSETOF(struct vop_inactive_args,a_vp),
+	VOPARG_OFFSETOF(struct vop_inactive_v2_args,a_vp),
 	VDESC_NO_OFFSET
 };
 const struct vnodeop_desc vop_inactive_desc = {
 	VOP_INACTIVE_DESCOFFSET,
 	"vop_inactive",
-	0 | VDESC_VP0_WILLUNLOCK,
+	0,
 	vop_inactive_vp_offsets,
 	VDESC_NO_OFFSET,
 	VDESC_NO_OFFSET,
@@ -1121,7 +1121,7 @@ VOP_INACTIVE(struct vnode *vp,
 {
 	int error;
 	bool mpsafe;
-	struct vop_inactive_args a;
+	struct vop_inactive_v2_args a;
 	a.a_desc = VDESC(vop_inactive);
 	a.a_vp = vp;
 	a.a_recycle = recycle;
Index: sys/kern/vnode_if.src
===================================================================
RCS file: /cvsroot/src/sys/kern/vnode_if.src,v
retrieving revision 1.70
diff -p -u -r1.70 vnode_if.src
--- sys/kern/vnode_if.src	22 Feb 2017 09:45:51 -0000	1.70
+++ sys/kern/vnode_if.src	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/deadfs/dead_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/deadfs/dead_vnops.c,v
retrieving revision 1.59
diff -p -u -r1.59 dead_vnops.c
--- sys/miscfs/deadfs/dead_vnops.c	20 Apr 2015 23:30:58 -0000	1.59
+++ sys/miscfs/deadfs/dead_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/fdesc/fdesc_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/fdesc/fdesc_vnops.c,v
retrieving revision 1.127
diff -p -u -r1.127 fdesc_vnops.c
--- sys/miscfs/fdesc/fdesc_vnops.c	20 Aug 2016 12:37:08 -0000	1.127
+++ sys/miscfs/fdesc/fdesc_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/fifofs/fifo_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/fifofs/fifo_vnops.c,v
retrieving revision 1.77
diff -p -u -r1.77 fifo_vnops.c
--- sys/miscfs/fifofs/fifo_vnops.c	9 Aug 2014 05:33:01 -0000	1.77
+++ sys/miscfs/fifofs/fifo_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/genfs/layer_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/genfs/layer_vnops.c,v
retrieving revision 1.61
diff -p -u -r1.61 layer_vnops.c
--- sys/miscfs/genfs/layer_vnops.c	30 Mar 2017 09:16:52 -0000	1.61
+++ sys/miscfs/genfs/layer_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/kernfs/kernfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/kernfs/kernfs_vnops.c,v
retrieving revision 1.156
diff -p -u -r1.156 kernfs_vnops.c
--- sys/miscfs/kernfs/kernfs_vnops.c	20 Aug 2016 12:37:09 -0000	1.156
+++ sys/miscfs/kernfs/kernfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/procfs/procfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/procfs/procfs_vnops.c,v
retrieving revision 1.195
diff -p -u -r1.195 procfs_vnops.c
--- sys/miscfs/procfs/procfs_vnops.c	30 Mar 2017 20:16:29 -0000	1.195
+++ sys/miscfs/procfs/procfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/miscfs/specfs/spec_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/specfs/spec_vnops.c,v
retrieving revision 1.169
diff -p -u -r1.169 spec_vnops.c
--- sys/miscfs/specfs/spec_vnops.c	1 Mar 2017 10:46:05 -0000	1.169
+++ sys/miscfs/specfs/spec_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/nfs/nfs_node.c
===================================================================
RCS file: /cvsroot/src/sys/nfs/nfs_node.c,v
retrieving revision 1.119
diff -p -u -r1.119 nfs_node.c
--- sys/nfs/nfs_node.c	20 Aug 2016 12:37:09 -0000	1.119
+++ sys/nfs/nfs_node.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/rump/include/rump/rumpvnode_if.h
===================================================================
RCS file: /cvsroot/src/sys/rump/include/rump/rumpvnode_if.h,v
retrieving revision 1.21
diff -p -u -r1.21 rumpvnode_if.h
--- sys/rump/include/rump/rumpvnode_if.h	22 Feb 2017 09:47:18 -0000	1.21
+++ sys/rump/include/rump/rumpvnode_if.h	11 Apr 2017 05:52:03 -0000
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpvnode_if.h,v 1.21 2017/02/22 09:47:18 hannken Exp $	*/
+/*	$NetBSD$	*/
 
 /*
  * Warning: DO NOT EDIT! This file is automatically generated!
Index: sys/rump/librump/rumpvfs/rumpfs.c
===================================================================
RCS file: /cvsroot/src/sys/rump/librump/rumpvfs/rumpfs.c,v
retrieving revision 1.145
diff -p -u -r1.145 rumpfs.c
--- sys/rump/librump/rumpvfs/rumpfs.c	1 Mar 2017 10:44:47 -0000	1.145
+++ sys/rump/librump/rumpvfs/rumpfs.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/rump/librump/rumpvfs/rumpvnode_if.c
===================================================================
RCS file: /cvsroot/src/sys/rump/librump/rumpvfs/rumpvnode_if.c,v
retrieving revision 1.21
diff -p -u -r1.21 rumpvnode_if.c
--- sys/rump/librump/rumpvfs/rumpvnode_if.c	22 Feb 2017 09:47:18 -0000	1.21
+++ sys/rump/librump/rumpvfs/rumpvnode_if.c	11 Apr 2017 05:52:03 -0000
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpvnode_if.c,v 1.21 2017/02/22 09:47:18 hannken Exp $	*/
+/*	$NetBSD$	*/
 
 /*
  * Warning: DO NOT EDIT! This file is automatically generated!
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpvnode_if.c,v 1.21 2017/02/22 09:47:18 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD$");
 
 #include <sys/param.h>
 #include <sys/mount.h>
Index: sys/sys/vnode_if.h
===================================================================
RCS file: /cvsroot/src/sys/sys/vnode_if.h,v
retrieving revision 1.92
diff -p -u -r1.92 vnode_if.h
--- sys/sys/vnode_if.h	22 Feb 2017 09:47:18 -0000	1.92
+++ sys/sys/vnode_if.h	11 Apr 2017 05:52:03 -0000
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnode_if.h,v 1.92 2017/02/22 09:47:18 hannken Exp $	*/
+/*	$NetBSD$	*/
 
 /*
  * Warning: DO NOT EDIT! This file is automatically generated!
@@ -372,7 +372,7 @@ extern const struct vnodeop_desc vop_abo
 int VOP_ABORTOP(struct vnode *, struct componentname *);
 
 #define VOP_INACTIVE_DESCOFFSET 31
-struct vop_inactive_args {
+struct vop_inactive_v2_args {
 	const struct vnodeop_desc *a_desc;
 	struct vnode *a_vp;
 	bool *a_recycle;
Index: sys/ufs/chfs/chfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/chfs/chfs_vnops.c,v
retrieving revision 1.30
diff -p -u -r1.30 chfs_vnops.c
--- sys/ufs/chfs/chfs_vnops.c	30 Mar 2017 09:10:46 -0000	1.30
+++ sys/ufs/chfs/chfs_vnops.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/ufs/ext2fs/ext2fs_inode.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/ext2fs/ext2fs_inode.c,v
retrieving revision 1.86
diff -p -u -r1.86 ext2fs_inode.c
--- sys/ufs/ext2fs/ext2fs_inode.c	14 Aug 2016 11:44:54 -0000	1.86
+++ sys/ufs/ext2fs/ext2fs_inode.c	11 Apr 2017 05:52:03 -0000
@@ -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: sys/ufs/lfs/lfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/lfs/lfs_vnops.c,v
retrieving revision 1.312
diff -p -u -r1.312 lfs_vnops.c
--- sys/ufs/lfs/lfs_vnops.c	11 Apr 2017 06:01:03 -0000	1.312
+++ sys/ufs/lfs/lfs_vnops.c	11 Apr 2017 06:02:03 -0000
@@ -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: sys/ufs/lfs/ulfs_inode.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/lfs/ulfs_inode.c,v
retrieving revision 1.17
diff -p -u -r1.17 ulfs_inode.c
--- sys/ufs/lfs/ulfs_inode.c	30 Mar 2017 09:10:08 -0000	1.17
+++ sys/ufs/lfs/ulfs_inode.c	11 Apr 2017 05:52:04 -0000
@@ -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: sys/ufs/mfs/mfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/mfs/mfs_vnops.c,v
retrieving revision 1.56
diff -p -u -r1.56 mfs_vnops.c
--- sys/ufs/mfs/mfs_vnops.c	14 Jan 2015 11:21:31 -0000	1.56
+++ sys/ufs/mfs/mfs_vnops.c	11 Apr 2017 05:52:04 -0000
@@ -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: sys/ufs/ufs/ufs_inode.c
===================================================================
RCS file: /cvsroot/src/sys/ufs/ufs/ufs_inode.c,v
retrieving revision 1.99
diff -p -u -r1.99 ufs_inode.c
--- sys/ufs/ufs/ufs_inode.c	1 Mar 2017 10:42:45 -0000	1.99
+++ sys/ufs/ufs/ufs_inode.c	11 Apr 2017 05:52:04 -0000
@@ -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);
 }
 
Index: external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
===================================================================
RCS file: /cvsroot/src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c,v
retrieving revision 1.23
diff -p -u -r1.23 zfs_vnops.c
--- external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	20 Apr 2015 23:03:07 -0000	1.23
+++ external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c	11 Apr 2017 05:56:31 -0000
@@ -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);
 }