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); }