Module Name: src Committed By: ad Date: Mon Apr 13 19:23:20 UTC 2020
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vfsops.c src/external/cddl/osnet/sys/sys: vnode.h src/sys/coda: coda_namecache.c coda_subr.c coda_vnops.c src/sys/fs/msdosfs: msdosfs_denode.c msdosfs_vfsops.c msdosfs_vnops.c src/sys/fs/nilfs: nilfs_vnops.c src/sys/fs/ntfs: ntfs_vfsops.c src/sys/fs/ptyfs: ptyfs_vnops.c src/sys/fs/udf: udf_vfsops.c udf_vnops.c src/sys/fs/v7fs: v7fs_vnops.c src/sys/kern: exec_subr.c vfs_cache.c vfs_getcwd.c vfs_mount.c vfs_subr.c vfs_vnode.c vfs_vnops.c src/sys/miscfs/fdesc: fdesc_vfsops.c src/sys/miscfs/genfs: layer_subr.c layer_vnops.c src/sys/miscfs/nullfs: null_vfsops.c src/sys/miscfs/overlay: overlay_vfsops.c src/sys/miscfs/umapfs: umap_vfsops.c src/sys/nfs: nfs_vfsops.c nfs_vnops.c src/sys/rump/librump/rumpvfs: rump_vfs.c rumpfs.c src/sys/sys: vnode.h src/sys/ufs/lfs: lfs_vnops.c src/sys/ufs/mfs: mfs_vnops.c src/sys/ufs/ufs: ufs_vnops.c Log Message: Replace most uses of vp->v_usecount with a call to vrefcnt(vp), a function that hides the details and does atomic_load_relaxed(). Signature matches FreeBSD. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c cvs rdiff -u -r1.15 -r1.16 src/external/cddl/osnet/sys/sys/vnode.h cvs rdiff -u -r1.26 -r1.27 src/sys/coda/coda_namecache.c cvs rdiff -u -r1.31 -r1.32 src/sys/coda/coda_subr.c cvs rdiff -u -r1.110 -r1.111 src/sys/coda/coda_vnops.c cvs rdiff -u -r1.57 -r1.58 src/sys/fs/msdosfs/msdosfs_denode.c cvs rdiff -u -r1.134 -r1.135 src/sys/fs/msdosfs/msdosfs_vfsops.c cvs rdiff -u -r1.100 -r1.101 src/sys/fs/msdosfs/msdosfs_vnops.c cvs rdiff -u -r1.38 -r1.39 src/sys/fs/nilfs/nilfs_vnops.c cvs rdiff -u -r1.109 -r1.110 src/sys/fs/ntfs/ntfs_vfsops.c cvs rdiff -u -r1.57 -r1.58 src/sys/fs/ptyfs/ptyfs_vnops.c cvs rdiff -u -r1.78 -r1.79 src/sys/fs/udf/udf_vfsops.c cvs rdiff -u -r1.109 -r1.110 src/sys/fs/udf/udf_vnops.c cvs rdiff -u -r1.27 -r1.28 src/sys/fs/v7fs/v7fs_vnops.c cvs rdiff -u -r1.83 -r1.84 src/sys/kern/exec_subr.c cvs rdiff -u -r1.138 -r1.139 src/sys/kern/vfs_cache.c cvs rdiff -u -r1.57 -r1.58 src/sys/kern/vfs_getcwd.c cvs rdiff -u -r1.77 -r1.78 src/sys/kern/vfs_mount.c cvs rdiff -u -r1.484 -r1.485 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.119 -r1.120 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.210 -r1.211 src/sys/kern/vfs_vnops.c cvs rdiff -u -r1.95 -r1.96 src/sys/miscfs/fdesc/fdesc_vfsops.c cvs rdiff -u -r1.37 -r1.38 src/sys/miscfs/genfs/layer_subr.c cvs rdiff -u -r1.69 -r1.70 src/sys/miscfs/genfs/layer_vnops.c cvs rdiff -u -r1.98 -r1.99 src/sys/miscfs/nullfs/null_vfsops.c cvs rdiff -u -r1.70 -r1.71 src/sys/miscfs/overlay/overlay_vfsops.c cvs rdiff -u -r1.102 -r1.103 src/sys/miscfs/umapfs/umap_vfsops.c cvs rdiff -u -r1.240 -r1.241 src/sys/nfs/nfs_vfsops.c cvs rdiff -u -r1.313 -r1.314 src/sys/nfs/nfs_vnops.c cvs rdiff -u -r1.90 -r1.91 src/sys/rump/librump/rumpvfs/rump_vfs.c cvs rdiff -u -r1.155 -r1.156 src/sys/rump/librump/rumpvfs/rumpfs.c cvs rdiff -u -r1.294 -r1.295 src/sys/sys/vnode.h cvs rdiff -u -r1.331 -r1.332 src/sys/ufs/lfs/lfs_vnops.c cvs rdiff -u -r1.59 -r1.60 src/sys/ufs/mfs/mfs_vnops.c cvs rdiff -u -r1.250 -r1.251 src/sys/ufs/ufs/ufs_vnops.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_vfsops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.26 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.27 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c:1.26 Fri Jan 17 20:08:06 2020 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vfsops.c Mon Apr 13 19:23:17 2020 @@ -1994,7 +1994,7 @@ zfs_mount(vfs_t *vfsp, const char *path, mutex_enter(mvp->v_interlock); if ((uap->flags & MS_REMOUNT) == 0 && (uap->flags & MS_OVERLAY) == 0 && - (mvp->v_count != 1 || (mvp->v_flag & VROOT))) { + (vrefcnt(mvp) != 1 || (mvp->v_flag & VROOT))) { mutex_exit(mvp->v_interlock); return (SET_ERROR(EBUSY)); } Index: src/external/cddl/osnet/sys/sys/vnode.h diff -u src/external/cddl/osnet/sys/sys/vnode.h:1.15 src/external/cddl/osnet/sys/sys/vnode.h:1.16 --- src/external/cddl/osnet/sys/sys/vnode.h:1.15 Sat Jan 12 10:44:36 2019 +++ src/external/cddl/osnet/sys/sys/vnode.h Mon Apr 13 19:23:17 2020 @@ -1,5 +1,4 @@ - -/* $NetBSD: vnode.h,v 1.15 2019/01/12 10:44:36 hannken Exp $ */ +/* $NetBSD: vnode.h,v 1.16 2020/04/13 19:23:17 ad Exp $ */ /* * CDDL HEADER START @@ -156,7 +155,7 @@ int vn_is_readonly(vnode_t *); #define vn_vfsunlock(vp) do { } while (0) #define vn_ismntpt(vp) ((vp)->v_type == VDIR && (vp)->v_mountedhere != NULL) #define vn_mountedvfs(vp) ((vp)->v_mountedhere) -#define vn_has_cached_data(vp) ((vp)->v_uobj.uo_npages != 0) +#define vn_has_cached_data(vp) (((vp)->v_iflag & VI_PAGES) != 0) #define vn_exists(vp) do { } while (0) #define vn_invalid(vp) do { } while (0) #define vn_free(vp) do { } while (0) @@ -166,7 +165,7 @@ int vn_is_readonly(vnode_t *); #define VN_HOLD(v) vref(v) #define VN_RELE(v) \ do { \ - if ((v)->v_usecount == 0) { \ + if (vrefcnt(v) == 0) { \ printf("VN_RELE(%s,%d): %p unused\n", __FILE__, __LINE__, v); \ vprint("VN_RELE", (v)); \ panic("VN_RELE"); \ Index: src/sys/coda/coda_namecache.c diff -u src/sys/coda/coda_namecache.c:1.26 src/sys/coda/coda_namecache.c:1.27 --- src/sys/coda/coda_namecache.c:1.26 Sat Oct 18 08:33:27 2014 +++ src/sys/coda/coda_namecache.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: coda_namecache.c,v 1.26 2014/10/18 08:33:27 snj Exp $ */ +/* $NetBSD: coda_namecache.c,v 1.27 2020/04/13 19:23:17 ad Exp $ */ /* * @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: coda_namecache.c,v 1.26 2014/10/18 08:33:27 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: coda_namecache.c,v 1.27 2020/04/13 19:23:17 ad Exp $"); #include <sys/param.h> #include <sys/errno.h> @@ -348,12 +348,12 @@ coda_nc_remove(struct coda_cache *cncp, LIST_REMOVE(cncp, hash); memset(&cncp->hash, 0, sizeof(cncp->hash)); - if ((dcstat == IS_DOWNCALL) && (CTOV(cncp->dcp)->v_usecount == 1)) { + if ((dcstat == IS_DOWNCALL) && (vrefcnt(CTOV(cncp->dcp)) == 1)) { cncp->dcp->c_flags |= C_PURGING; } vrele(CTOV(cncp->dcp)); - if ((dcstat == IS_DOWNCALL) && (CTOV(cncp->cp)->v_usecount == 1)) { + if ((dcstat == IS_DOWNCALL) && (vrefcnt(CTOV(cncp->cp)) == 1)) { cncp->cp->c_flags |= C_PURGING; } vrele(CTOV(cncp->cp)); @@ -570,7 +570,7 @@ coda_nc_flush(enum dc_status dcstat) memset(&cncp->hash, 0, sizeof(cncp->hash)); if ((dcstat == IS_DOWNCALL) - && (CTOV(cncp->dcp)->v_usecount == 1)) + && (vrefcnt(CTOV(cncp->dcp)) == 1)) { cncp->dcp->c_flags |= C_PURGING; } @@ -584,7 +584,7 @@ coda_nc_flush(enum dc_status dcstat) } if ((dcstat == IS_DOWNCALL) - && (CTOV(cncp->cp)->v_usecount == 1)) + && (vrefcnt(CTOV(cncp->cp)) == 1)) { cncp->cp->c_flags |= C_PURGING; } Index: src/sys/coda/coda_subr.c diff -u src/sys/coda/coda_subr.c:1.31 src/sys/coda/coda_subr.c:1.32 --- src/sys/coda/coda_subr.c:1.31 Tue Jan 6 11:24:46 2015 +++ src/sys/coda/coda_subr.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: coda_subr.c,v 1.31 2015/01/06 11:24:46 hannken Exp $ */ +/* $NetBSD: coda_subr.c,v 1.32 2020/04/13 19:23:17 ad Exp $ */ /* * @@ -55,7 +55,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: coda_subr.c,v 1.31 2015/01/06 11:24:46 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: coda_subr.c,v 1.32 2020/04/13 19:23:17 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -220,7 +220,7 @@ coda_testflush_selector(void *cl, struct if (cp != NULL) myprintf(("Live cnode fid %s count %d\n", - coda_f2s(&cp->c_fid), CTOV(cp)->v_usecount)); + coda_f2s(&cp->c_fid), vrefcnt(CTOV(cp)))); return false; } @@ -370,8 +370,8 @@ int handleDownCall(int opcode, union out error = coda_vmflush(cp); CODADEBUG(CODA_ZAPFILE, myprintf(( "zapfile: fid = %s, refcnt = %d, error = %d\n", - coda_f2s(&cp->c_fid), CTOV(cp)->v_usecount - 1, error));); - if (CTOV(cp)->v_usecount == 1) { + coda_f2s(&cp->c_fid), vrefcnt(CTOV(cp)) - 1, error));); + if (vrefcnt(CTOV(cp)) == 1) { cp->c_flags |= C_PURGING; } mutex_exit(&cp->c_lock); @@ -394,8 +394,8 @@ int handleDownCall(int opcode, union out CODADEBUG(CODA_ZAPDIR, myprintf(( "zapdir: fid = %s, refcnt = %d\n", - coda_f2s(&cp->c_fid), CTOV(cp)->v_usecount - 1));); - if (CTOV(cp)->v_usecount == 1) { + coda_f2s(&cp->c_fid), vrefcnt(CTOV(cp)) - 1));); + if (vrefcnt(CTOV(cp)) == 1) { cp->c_flags |= C_PURGING; } mutex_exit(&cp->c_lock); @@ -427,8 +427,8 @@ int handleDownCall(int opcode, union out } CODADEBUG(CODA_PURGEFID, myprintf(( "purgefid: fid = %s, refcnt = %d, error = %d\n", - coda_f2s(&cp->c_fid), CTOV(cp)->v_usecount - 1, error));); - if (CTOV(cp)->v_usecount == 1) { + coda_f2s(&cp->c_fid), vrefcnt(CTOV(cp)) - 1, error));); + if (vrefcnt(CTOV(cp)) == 1) { cp->c_flags |= C_PURGING; } mutex_exit(&cp->c_lock); Index: src/sys/coda/coda_vnops.c diff -u src/sys/coda/coda_vnops.c:1.110 src/sys/coda/coda_vnops.c:1.111 --- src/sys/coda/coda_vnops.c:1.110 Mon Feb 24 20:53:11 2020 +++ src/sys/coda/coda_vnops.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: coda_vnops.c,v 1.110 2020/02/24 20:53:11 ad Exp $ */ +/* $NetBSD: coda_vnops.c,v 1.111 2020/04/13 19:23:17 ad Exp $ */ /* * @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.110 2020/02/24 20:53:11 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.111 2020/04/13 19:23:17 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -329,7 +329,7 @@ coda_close(void *v) if (cp->c_ovp) { #ifdef CODA_VERBOSE printf("%s: destroying container %d, ufs vp %p of vp %p/cp %p\n", - __func__, vp->v_usecount, cp->c_ovp, vp, cp); + __func__, vrefcnt(vp), cp->c_ovp, vp, cp); #endif #ifdef hmm vgone(cp->c_ovp); @@ -465,7 +465,7 @@ coda_rdwr(vnode_t *vp, struct uio *uiop, /* Have UFS handle the call. */ CODADEBUG(CODA_RDWR, myprintf(("%s: fid = %s, refcnt = %d\n", __func__, - coda_f2s(&cp->c_fid), CTOV(cp)->v_usecount)); ) + coda_f2s(&cp->c_fid), vrefcnt(CTOV(cp)))); ) if (rw == UIO_READ) { error = VOP_READ(cfvp, uiop, ioflag, cred); @@ -850,8 +850,8 @@ coda_inactive(void *v) #ifdef CODA_VERBOSE /* Sanity checks that perhaps should be panic. */ - if (vp->v_usecount > 1) - printf("%s: %p usecount %d\n", __func__, vp, vp->v_usecount); + if (vrefcnt(vp) > 1) + printf("%s: %p usecount %d\n", __func__, vp, vrefcnt(vp)); if (cp->c_ovp != NULL) printf("%s: %p ovp != NULL\n", __func__, vp); #endif @@ -1569,7 +1569,7 @@ coda_readdir(void *v) /* Have UFS handle the call. */ CODADEBUG(CODA_READDIR, myprintf(("%s: fid = %s, refcnt = %d\n", - __func__, coda_f2s(&cp->c_fid), vp->v_usecount)); ) + __func__, coda_f2s(&cp->c_fid), vrefcnt(vp))); ) saved_type = vp->v_type; vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); vp->v_type = VDIR; /* pretend the container file is a dir */ @@ -1661,7 +1661,7 @@ coda_reclaim(void *v) #endif } else { #ifdef OLD_DIAGNOSTIC - if (vp->v_usecount != 0) + if (vrefcnt(vp) != 0) print("%s: pushing active %p\n", __func__, vp); if (VTOC(vp)->c_ovp) { panic("%s: c_ovp not void", __func__); Index: src/sys/fs/msdosfs/msdosfs_denode.c diff -u src/sys/fs/msdosfs/msdosfs_denode.c:1.57 src/sys/fs/msdosfs/msdosfs_denode.c:1.58 --- src/sys/fs/msdosfs/msdosfs_denode.c:1.57 Mon May 28 21:04:37 2018 +++ src/sys/fs/msdosfs/msdosfs_denode.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: msdosfs_denode.c,v 1.57 2018/05/28 21:04:37 chs Exp $ */ +/* $NetBSD: msdosfs_denode.c,v 1.58 2020/04/13 19:23:17 ad 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.57 2018/05/28 21:04:37 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msdosfs_denode.c,v 1.58 2020/04/13 19:23:17 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -611,8 +611,8 @@ out: * so that it can be reused immediately. */ #ifdef MSDOSFS_DEBUG - printf("msdosfs_inactive(): v_usecount %d, de_Name[0] %x\n", - vp->v_usecount, dep->de_Name[0]); + printf("msdosfs_inactive(): usecount %d, de_Name[0] %x\n", + vrefcnt(vp), dep->de_Name[0]); #endif *ap->a_recycle = (dep->de_Name[0] == SLOT_DELETED); Index: src/sys/fs/msdosfs/msdosfs_vfsops.c diff -u src/sys/fs/msdosfs/msdosfs_vfsops.c:1.134 src/sys/fs/msdosfs/msdosfs_vfsops.c:1.135 --- src/sys/fs/msdosfs/msdosfs_vfsops.c:1.134 Sat Apr 4 20:49:30 2020 +++ src/sys/fs/msdosfs/msdosfs_vfsops.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: msdosfs_vfsops.c,v 1.134 2020/04/04 20:49:30 ad Exp $ */ +/* $NetBSD: msdosfs_vfsops.c,v 1.135 2020/04/13 19:23:17 ad Exp $ */ /*- * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.134 2020/04/04 20:49:30 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msdosfs_vfsops.c,v 1.135 2020/04/13 19:23:17 ad Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -926,7 +926,7 @@ msdosfs_unmount(struct mount *mp, int mn printf("msdosfs_umount(): just before calling VOP_CLOSE()\n"); printf("flag %08x, usecount %d, writecount %d, holdcnt %d\n", - vp->v_vflag | vp->v_iflag | vp->v_uflag, vp->v_usecount, + vp->v_vflag | vp->v_iflag | vp->v_uflag, vrefcnt(vp), vp->v_writecount, vp->v_holdcnt); printf("mount %p, op %p\n", vp->v_mount, vp->v_op); Index: src/sys/fs/msdosfs/msdosfs_vnops.c diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.100 src/sys/fs/msdosfs/msdosfs_vnops.c:1.101 --- src/sys/fs/msdosfs/msdosfs_vnops.c:1.100 Sun Feb 23 15:46:40 2020 +++ src/sys/fs/msdosfs/msdosfs_vnops.c Mon Apr 13 19:23:17 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: msdosfs_vnops.c,v 1.100 2020/02/23 15:46:40 ad Exp $ */ +/* $NetBSD: msdosfs_vnops.c,v 1.101 2020/04/13 19:23:17 ad Exp $ */ /*- * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.100 2020/02/23 15:46:40 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.101 2020/04/13 19:23:17 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -173,7 +173,7 @@ msdosfs_close(void *v) struct denode *dep = VTODE(vp); mutex_enter(vp->v_interlock); - if (vp->v_usecount > 1) + if (vrefcnt(vp) > 1) DETIMES(dep, NULL, NULL, NULL, dep->de_pmp->pm_gmtoff); mutex_exit(vp->v_interlock); return (0); @@ -731,8 +731,8 @@ msdosfs_remove(void *v) else error = removede(ddep, dep); #ifdef MSDOSFS_DEBUG - printf("msdosfs_remove(), dep %p, v_usecount %d\n", - dep, ap->a_vp->v_usecount); + printf("msdosfs_remove(), dep %p, usecount %d\n", + dep, vrefcnt(ap->a_vp)); #endif VN_KNOTE(ap->a_vp, NOTE_DELETE); VN_KNOTE(ap->a_dvp, NOTE_WRITE); Index: src/sys/fs/nilfs/nilfs_vnops.c diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.38 src/sys/fs/nilfs/nilfs_vnops.c:1.39 --- src/sys/fs/nilfs/nilfs_vnops.c:1.38 Fri Dec 27 09:41:51 2019 +++ src/sys/fs/nilfs/nilfs_vnops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nilfs_vnops.c,v 1.38 2019/12/27 09:41:51 msaitoh Exp $ */ +/* $NetBSD: nilfs_vnops.c,v 1.39 2020/04/13 19:23:18 ad 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.38 2019/12/27 09:41:51 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.39 2020/04/13 19:23:18 ad Exp $"); #endif /* not lint */ @@ -976,8 +976,8 @@ nilfs_close(void *v) nilfs_node = nilfs_node; /* shut up gcc */ mutex_enter(vp->v_interlock); - if (vp->v_usecount > 1) - nilfs_itimes(nilfs_node, NULL, NULL, NULL); + if (vrefcnt(vp) > 1) + nilfs_itimes(nilfs_node, NULL, NULL, NULL); mutex_exit(vp->v_interlock); return 0; Index: src/sys/fs/ntfs/ntfs_vfsops.c diff -u src/sys/fs/ntfs/ntfs_vfsops.c:1.109 src/sys/fs/ntfs/ntfs_vfsops.c:1.110 --- src/sys/fs/ntfs/ntfs_vfsops.c:1.109 Fri Jan 17 20:08:08 2020 +++ src/sys/fs/ntfs/ntfs_vfsops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ntfs_vfsops.c,v 1.109 2020/01/17 20:08:08 ad Exp $ */ +/* $NetBSD: ntfs_vfsops.c,v 1.110 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 1998, 1999 Semen Ustimenko @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.109 2020/01/17 20:08:08 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.110 2020/04/13 19:23:18 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -526,7 +526,7 @@ ntfs_unmount(struct mount *mp, int mntfl /* Check if only system vnodes are rest */ for (i = 0; i < NTFS_SYSNODESNUM; i++) if ((ntmp->ntm_sysvn[i]) && - (ntmp->ntm_sysvn[i]->v_usecount > 1)) + (vrefcnt(ntmp->ntm_sysvn[i]) > 1)) return (EBUSY); /* Dereference all system vnodes */ Index: src/sys/fs/ptyfs/ptyfs_vnops.c diff -u src/sys/fs/ptyfs/ptyfs_vnops.c:1.57 src/sys/fs/ptyfs/ptyfs_vnops.c:1.58 --- src/sys/fs/ptyfs/ptyfs_vnops.c:1.57 Thu Sep 26 20:57:19 2019 +++ src/sys/fs/ptyfs/ptyfs_vnops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ptyfs_vnops.c,v 1.57 2019/09/26 20:57:19 christos Exp $ */ +/* $NetBSD: ptyfs_vnops.c,v 1.58 2020/04/13 19:23:18 ad Exp $ */ /* * Copyright (c) 1993, 1995 @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.57 2019/09/26 20:57:19 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ptyfs_vnops.c,v 1.58 2020/04/13 19:23:18 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -798,7 +798,7 @@ ptyfs_close(void *v) struct ptyfsnode *ptyfs = VTOPTYFS(vp); mutex_enter(vp->v_interlock); - if (vp->v_usecount > 1) + if (vrefcnt(vp) > 1) PTYFS_ITIMES(ptyfs, NULL, NULL, NULL); mutex_exit(vp->v_interlock); Index: src/sys/fs/udf/udf_vfsops.c diff -u src/sys/fs/udf/udf_vfsops.c:1.78 src/sys/fs/udf/udf_vfsops.c:1.79 --- src/sys/fs/udf/udf_vfsops.c:1.78 Mon Mar 16 21:20:10 2020 +++ src/sys/fs/udf/udf_vfsops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_vfsops.c,v 1.78 2020/03/16 21:20:10 pgoyette Exp $ */ +/* $NetBSD: udf_vfsops.c,v 1.79 2020/04/13 19:23:18 ad Exp $ */ /* * Copyright (c) 2006, 2008 Reinoud Zandijk @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.78 2020/03/16 21:20:10 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udf_vfsops.c,v 1.79 2020/04/13 19:23:18 ad Exp $"); #endif /* not lint */ @@ -445,8 +445,8 @@ udf_sanity_selector(void *cl, struct vno if (VOP_ISLOCKED(vp) == LK_EXCLUSIVE) { printf(" is locked\n"); } - if (vp->v_usecount > 1) - printf(" more than one usecount %d\n", vp->v_usecount); + if (vrefcnt(vp) > 1) + printf(" more than one usecount %d\n", vrefcnt(vp)); return false; } Index: src/sys/fs/udf/udf_vnops.c diff -u src/sys/fs/udf/udf_vnops.c:1.109 src/sys/fs/udf/udf_vnops.c:1.110 --- src/sys/fs/udf/udf_vnops.c:1.109 Sun Feb 23 15:46:41 2020 +++ src/sys/fs/udf/udf_vnops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: udf_vnops.c,v 1.109 2020/02/23 15:46:41 ad Exp $ */ +/* $NetBSD: udf_vnops.c,v 1.110 2020/04/13 19:23:18 ad 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.109 2020/02/23 15:46:41 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.110 2020/04/13 19:23:18 ad Exp $"); #endif /* not lint */ @@ -1386,8 +1386,8 @@ udf_close(void *v) } mutex_enter(vp->v_interlock); - if (vp->v_usecount > 1) - udf_itimes(udf_node, NULL, NULL, NULL); + if (vrefcnt(vp) > 1) + udf_itimes(udf_node, NULL, NULL, NULL); mutex_exit(vp->v_interlock); return 0; Index: src/sys/fs/v7fs/v7fs_vnops.c diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.27 src/sys/fs/v7fs/v7fs_vnops.c:1.28 --- src/sys/fs/v7fs/v7fs_vnops.c:1.27 Fri Jan 17 20:08:09 2020 +++ src/sys/fs/v7fs/v7fs_vnops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: v7fs_vnops.c,v 1.27 2020/01/17 20:08:09 ad Exp $ */ +/* $NetBSD: v7fs_vnops.c,v 1.28 2020/04/13 19:23:18 ad 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.27 2020/01/17 20:08:09 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.28 2020/04/13 19:23:18 ad Exp $"); #if defined _KERNEL_OPT #include "opt_v7fs.h" #endif @@ -138,7 +138,7 @@ v7fs_lookup(void *v) if ((nameiop == RENAME) && islastcn) { return EISDIR; /* t_vnops rename_dir(3) */ } - vref(dvp); /* v_usecount++ */ + vref(dvp); /* usecount++ */ *a->a_vpp = dvp; DPRINTF("done.(.)\n"); return 0; @@ -717,9 +717,9 @@ v7fs_remove(void *v) out: if (dvp == vp) - vrele(vp); /* v_usecount-- of unlocked vp */ + vrele(vp); /* usecount-- of unlocked vp */ else - vput(vp); /* unlock vp and then v_usecount-- */ + vput(vp); /* unlock vp and then usecount-- */ return error; } Index: src/sys/kern/exec_subr.c diff -u src/sys/kern/exec_subr.c:1.83 src/sys/kern/exec_subr.c:1.84 --- src/sys/kern/exec_subr.c:1.83 Sun Jan 12 18:30:58 2020 +++ src/sys/kern/exec_subr.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: exec_subr.c,v 1.83 2020/01/12 18:30:58 ad Exp $ */ +/* $NetBSD: exec_subr.c,v 1.84 2020/04/13 19:23:18 ad Exp $ */ /* * Copyright (c) 1993, 1994, 1996 Christopher G. Demetriou @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.83 2020/01/12 18:30:58 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.84 2020/04/13 19:23:18 ad Exp $"); #include "opt_pax.h" @@ -87,7 +87,7 @@ new_vmcmd(struct exec_vmcmd_set *evsp, VMCMD_EVCNT_INCR(calls); KASSERT(proc != vmcmd_map_pagedvn || (vp->v_iflag & VI_TEXT)); - KASSERT(vp == NULL || vp->v_usecount > 0); + KASSERT(vp == NULL || vrefcnt(vp) > 0); if (evsp->evs_used >= evsp->evs_cnt) vmcmdset_extend(evsp); Index: src/sys/kern/vfs_cache.c diff -u src/sys/kern/vfs_cache.c:1.138 src/sys/kern/vfs_cache.c:1.139 --- src/sys/kern/vfs_cache.c:1.138 Fri Apr 10 16:55:40 2020 +++ src/sys/kern/vfs_cache.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_cache.c,v 1.138 2020/04/10 16:55:40 ad Exp $ */ +/* $NetBSD: vfs_cache.c,v 1.139 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 2008, 2019, 2020 The NetBSD Foundation, Inc. @@ -172,7 +172,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.138 2020/04/10 16:55:40 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.139 2020/04/13 19:23:18 ad Exp $"); #define __NAMECACHE_PRIVATE #ifdef _KERNEL_OPT @@ -673,7 +673,7 @@ cache_lookup_linked(struct vnode *dvp, c } *plock = &dvi->vi_nc_lock; } else if (*plock == NULL) { - KASSERT(dvp->v_usecount > 0); + KASSERT(vrefcnt(dvp) > 0); } /* Index: src/sys/kern/vfs_getcwd.c diff -u src/sys/kern/vfs_getcwd.c:1.57 src/sys/kern/vfs_getcwd.c:1.58 --- src/sys/kern/vfs_getcwd.c:1.57 Sat Apr 4 20:49:30 2020 +++ src/sys/kern/vfs_getcwd.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_getcwd.c,v 1.57 2020/04/04 20:49:30 ad Exp $ */ +/* $NetBSD: vfs_getcwd.c,v 1.58 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 1999, 2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_getcwd.c,v 1.57 2020/04/04 20:49:30 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_getcwd.c,v 1.58 2020/04/13 19:23:18 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -527,7 +527,7 @@ vnode_to_path(char *path, size_t len, st char *bp, *bend; struct vnode *dvp; - KASSERT(vp->v_usecount > 0); + KASSERT(vrefcnt(vp) > 0); bp = bend = &path[len]; *(--bp) = '\0'; Index: src/sys/kern/vfs_mount.c diff -u src/sys/kern/vfs_mount.c:1.77 src/sys/kern/vfs_mount.c:1.78 --- src/sys/kern/vfs_mount.c:1.77 Mon Apr 13 15:54:45 2020 +++ src/sys/kern/vfs_mount.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.77 2020/04/13 15:54:45 maxv Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.78 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 1997-2020 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.77 2020/04/13 15:54:45 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.78 2020/04/13 19:23:18 ad Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -395,7 +395,7 @@ vfs_vnode_iterator_destroy(struct vnode_ kmutex_t *lock; KASSERT(vnis_marker(mvp)); - if (mvp->v_usecount != 0) { + if (vrefcnt(mvp) != 0) { lock = mvp->v_mount->mnt_vnodelock; mutex_enter(lock); TAILQ_REMOVE(&mvp->v_mount->mnt_vnodelist, mvip, vi_mntvnodes); @@ -581,7 +581,7 @@ vflush_one(vnode_t *vp, vnode_t *skipvp, * kill them. */ if (flags & FORCECLOSE) { - if (vp->v_usecount > 1 && + if (vrefcnt(vp) > 1 && (vp->v_type == VBLK || vp->v_type == VCHR)) vcache_make_anon(vp); else @@ -651,7 +651,7 @@ mount_checkdirs(vnode_t *olddp) struct proc *p; bool retry; - if (olddp->v_usecount == 1) { + if (vrefcnt(olddp) == 1) { return; } if (VFS_ROOT(olddp->v_mountedhere, LK_EXCLUSIVE, &newdp)) Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.484 src/sys/kern/vfs_subr.c:1.485 --- src/sys/kern/vfs_subr.c:1.484 Sat Mar 14 20:45:23 2020 +++ src/sys/kern/vfs_subr.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.484 2020/03/14 20:45:23 ad Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.485 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008, 2019, 2020 @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.484 2020/03/14 20:45:23 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.485 2020/04/13 19:23:18 ad Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1104,7 +1104,7 @@ vprint_common(struct vnode *vp, const ch ARRAY_PRINT(vp->v_type, vnode_types), vp->v_type, vp->v_mount, vp->v_mountedhere); (*pr)("%susecount %d writecount %d holdcount %d\n", prefix, - vp->v_usecount, vp->v_writecount, vp->v_holdcnt); + vrefcnt(vp), vp->v_writecount, vp->v_holdcnt); (*pr)("%ssize %" PRIx64 " writesize %" PRIx64 " numoutput %d\n", prefix, vp->v_size, vp->v_writesize, vp->v_numoutput); (*pr)("%sdata %p lock %p\n", prefix, vp->v_data, &vip->vi_lock); Index: src/sys/kern/vfs_vnode.c diff -u src/sys/kern/vfs_vnode.c:1.119 src/sys/kern/vfs_vnode.c:1.120 --- src/sys/kern/vfs_vnode.c:1.119 Mon Apr 13 15:54:45 2020 +++ src/sys/kern/vfs_vnode.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnode.c,v 1.119 2020/04/13 15:54:45 maxv Exp $ */ +/* $NetBSD: vfs_vnode.c,v 1.120 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 1997-2011, 2019, 2020 The NetBSD Foundation, Inc. @@ -155,7 +155,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.119 2020/04/13 15:54:45 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.120 2020/04/13 19:23:18 ad Exp $"); #ifdef _KERNEL_OPT #include "opt_pax.h" @@ -236,6 +236,16 @@ extern int (**dead_vnodeop_p)(void *); extern int (**spec_vnodeop_p)(void *); extern struct vfsops dead_vfsops; +/* + * Return the current usecount of a vnode. + */ +inline int +vrefcnt(struct vnode *vp) +{ + + return atomic_load_relaxed(&vp->v_usecount); +} + /* Vnode state operations and diagnostics. */ #if defined(DIAGNOSTIC) @@ -254,6 +264,7 @@ _vstate_assert(vnode_t *vp, enum vnode_s bool has_lock) { vnode_impl_t *vip = VNODE_TO_VIMPL(vp); + int refcnt = vrefcnt(vp); if (!has_lock) { /* @@ -261,7 +272,7 @@ _vstate_assert(vnode_t *vp, enum vnode_s * without loooking first. */ membar_enter(); - if (state == VS_ACTIVE && vp->v_usecount > 0 && + if (state == VS_ACTIVE && refcnt > 0 && (vip->vi_state == VS_LOADED || vip->vi_state == VS_BLOCKED)) return; if (vip->vi_state == state) @@ -271,7 +282,7 @@ _vstate_assert(vnode_t *vp, enum vnode_s KASSERTMSG(mutex_owned(vp->v_interlock), "at %s:%d", func, line); - if ((state == VS_ACTIVE && vp->v_usecount > 0 && + if ((state == VS_ACTIVE && refcnt > 0 && (vip->vi_state == VS_LOADED || vip->vi_state == VS_BLOCKED)) || vip->vi_state == state) { if (!has_lock) @@ -279,7 +290,7 @@ _vstate_assert(vnode_t *vp, enum vnode_s return; } vnpanic(vp, "state is %s, usecount %d, expected %s at %s:%d", - vstate_name(vip->vi_state), vp->v_usecount, + vstate_name(vip->vi_state), refcnt, vstate_name(state), func, line); } @@ -319,6 +330,7 @@ vstate_assert_change(vnode_t *vp, enum v const char *func, int line) { vnode_impl_t *vip = VNODE_TO_VIMPL(vp); + int refcnt = vrefcnt(vp); KASSERTMSG(mutex_owned(vp->v_interlock), "at %s:%d", func, line); if (from == VS_LOADING) @@ -333,9 +345,9 @@ vstate_assert_change(vnode_t *vp, enum v if (vip->vi_state != from) vnpanic(vp, "from is %s, expected %s at %s:%d\n", vstate_name(vip->vi_state), vstate_name(from), func, line); - if ((from == VS_BLOCKED || to == VS_BLOCKED) && vp->v_usecount != 1) + if ((from == VS_BLOCKED || to == VS_BLOCKED) && refcnt != 1) vnpanic(vp, "%s to %s with usecount %d at %s:%d", - vstate_name(from), vstate_name(to), vp->v_usecount, + vstate_name(from), vstate_name(to), refcnt, func, line); vip->vi_state = to; @@ -568,13 +580,13 @@ vdrain_remove(vnode_t *vp) KASSERT(mutex_owned(&vdrain_lock)); /* Probe usecount (unlocked). */ - if (vp->v_usecount > 0) + if (vrefcnt(vp) > 0) return; /* Try v_interlock -- we lock the wrong direction! */ if (!mutex_tryenter(vp->v_interlock)) return; /* Probe usecount and state. */ - if (vp->v_usecount > 0 || VSTATE_GET(vp) != VS_LOADED) { + if (vrefcnt(vp) > 0 || VSTATE_GET(vp) != VS_LOADED) { mutex_exit(vp->v_interlock); return; } @@ -617,7 +629,7 @@ vdrain_vrele(vnode_t *vp) * First remove the vnode from the vrele list. * Put it on the last lru list, the last vrele() * will put it back onto the right list before - * its v_usecount reaches zero. + * its usecount reaches zero. */ KASSERT(vip->vi_lrulisthd == &lru_list[LRU_VRELE]); TAILQ_REMOVE(vip->vi_lrulisthd, vip, vi_lrulist); @@ -715,13 +727,13 @@ vput(vnode_t *vp) int lktype; /* - * Do an unlocked check of v_usecount. If it looks like we're not + * Do an unlocked check of the usecount. If it looks like we're not * about to drop the last reference, then unlock the vnode and try * to drop the reference. If it ends up being the last reference * after all, vrelel() can fix it all up. Most of the time this * will all go to plan. */ - if (atomic_load_relaxed(&vp->v_usecount) > 1) { + if (vrefcnt(vp) > 1) { VOP_UNLOCK(vp); if (vtryrele(vp)) { return; @@ -768,7 +780,7 @@ vrelel(vnode_t *vp, int flags, int lktyp mutex_exit(vp->v_interlock); return; } - if (vp->v_usecount <= 0 || vp->v_writecount != 0) { + if (vrefcnt(vp) <= 0 || vp->v_writecount != 0) { vnpanic(vp, "%s: bad ref count", __func__); } @@ -869,7 +881,7 @@ vrelel(vnode_t *vp, int flags, int lktyp } else { VOP_UNLOCK(vp); } - KASSERT(vp->v_usecount > 0); + KASSERT(vrefcnt(vp) > 0); } if (atomic_dec_uint_nv(&vp->v_usecount) != 0) { @@ -930,7 +942,7 @@ void vref(vnode_t *vp) { - KASSERT(atomic_load_relaxed(&vp->v_usecount) != 0); + KASSERT(vrefcnt(vp) > 0); atomic_inc_uint(&vp->v_usecount); } @@ -945,7 +957,7 @@ vholdl(vnode_t *vp) KASSERT(mutex_owned(vp->v_interlock)); - if (vp->v_holdcnt++ == 0 && vp->v_usecount == 0) + if (vp->v_holdcnt++ == 0 && vrefcnt(vp) == 0) lru_requeue(vp, lru_which(vp)); } @@ -976,7 +988,7 @@ holdrelel(vnode_t *vp) } vp->v_holdcnt--; - if (vp->v_holdcnt == 0 && vp->v_usecount == 0) + if (vp->v_holdcnt == 0 && vrefcnt(vp) == 0) lru_requeue(vp, lru_which(vp)); } @@ -1004,7 +1016,7 @@ vrecycle(vnode_t *vp) /* Make sure we hold the last reference. */ VSTATE_WAIT_STABLE(vp); - if (vp->v_usecount != 1) { + if (vrefcnt(vp) != 1) { mutex_exit(vp->v_interlock); return false; } @@ -1036,7 +1048,7 @@ vrecycle(vnode_t *vp) return false; } - KASSERT(vp->v_usecount == 1); + KASSERT(vrefcnt(vp) == 1); vcache_reclaim(vp); vrelel(vp, 0, LK_NONE); @@ -1085,7 +1097,7 @@ vrevoke(vnode_t *vp) enum vtype type; dev_t dev; - KASSERT(vp->v_usecount > 0); + KASSERT(vrefcnt(vp) > 0); mp = vrevoke_suspend_next(NULL, vp->v_mount); @@ -1273,7 +1285,7 @@ vcache_free(vnode_impl_t *vip) vp = VIMPL_TO_VNODE(vip); KASSERT(mutex_owned(vp->v_interlock)); - KASSERT(vp->v_usecount == 0); + KASSERT(vrefcnt(vp) == 0); KASSERT(vp->v_holdcnt == 0); KASSERT(vp->v_writecount == 0); lru_requeue(vp, NULL); @@ -1339,7 +1351,7 @@ vcache_vget(vnode_t *vp) /* If this was the last reference to a reclaimed vnode free it now. */ if (__predict_false(VSTATE_GET(vp) == VS_RECLAIMED)) { - if (vp->v_holdcnt == 0 && vp->v_usecount == 0) + if (vp->v_holdcnt == 0 && vrefcnt(vp) == 0) vcache_free(VNODE_TO_VIMPL(vp)); else mutex_exit(vp->v_interlock); @@ -1654,9 +1666,9 @@ vcache_reclaim(vnode_t *vp) KASSERT((vp->v_vflag & VV_LOCKSWORK) == 0 || VOP_ISLOCKED(vp) == LK_EXCLUSIVE); KASSERT(mutex_owned(vp->v_interlock)); - KASSERT(vp->v_usecount != 0); + KASSERT(vrefcnt(vp) != 0); - active = (vp->v_usecount > 1); + active = (vrefcnt(vp) > 1); temp_key_len = vip->vi_key.vk_key_len; /* * Prevent the vnode from being recycled or brought into use Index: src/sys/kern/vfs_vnops.c diff -u src/sys/kern/vfs_vnops.c:1.210 src/sys/kern/vfs_vnops.c:1.211 --- src/sys/kern/vfs_vnops.c:1.210 Sun Apr 12 19:56:14 2020 +++ src/sys/kern/vfs_vnops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnops.c,v 1.210 2020/04/12 19:56:14 christos Exp $ */ +/* $NetBSD: vfs_vnops.c,v 1.211 2020/04/13 19:23:18 ad Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.210 2020/04/12 19:56:14 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.211 2020/04/13 19:23:18 ad Exp $"); #include "veriexec.h" @@ -1041,7 +1041,7 @@ vn_lock(struct vnode *vp, int flags) int error; #if 0 - KASSERT(vp->v_usecount > 0 || (vp->v_iflag & VI_ONWORKLST) != 0); + KASSERT(vrefcnt(vp) > 0 || (vp->v_iflag & VI_ONWORKLST) != 0); #endif KASSERT((flags & ~(LK_SHARED|LK_EXCLUSIVE|LK_NOWAIT|LK_RETRY| LK_UPGRADE|LK_DOWNGRADE)) == 0); Index: src/sys/miscfs/fdesc/fdesc_vfsops.c diff -u src/sys/miscfs/fdesc/fdesc_vfsops.c:1.95 src/sys/miscfs/fdesc/fdesc_vfsops.c:1.96 --- src/sys/miscfs/fdesc/fdesc_vfsops.c:1.95 Sat Mar 21 16:30:39 2020 +++ src/sys/miscfs/fdesc/fdesc_vfsops.c Mon Apr 13 19:23:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: fdesc_vfsops.c,v 1.95 2020/03/21 16:30:39 pgoyette Exp $ */ +/* $NetBSD: fdesc_vfsops.c,v 1.96 2020/04/13 19:23:18 ad Exp $ */ /* * Copyright (c) 1992, 1993, 1995 @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.95 2020/03/21 16:30:39 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdesc_vfsops.c,v 1.96 2020/04/13 19:23:18 ad Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -119,7 +119,7 @@ fdesc_unmount(struct mount *mp, int mntf if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - if (rtvp->v_usecount > 1 && (mntflags & MNT_FORCE) == 0) + if (vrefcnt(rtvp) > 1 && (mntflags & MNT_FORCE) == 0) return (EBUSY); if ((error = vflush(mp, rtvp, flags)) != 0) return (error); Index: src/sys/miscfs/genfs/layer_subr.c diff -u src/sys/miscfs/genfs/layer_subr.c:1.37 src/sys/miscfs/genfs/layer_subr.c:1.38 --- src/sys/miscfs/genfs/layer_subr.c:1.37 Sun Nov 9 18:08:07 2014 +++ src/sys/miscfs/genfs/layer_subr.c Mon Apr 13 19:23:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: layer_subr.c,v 1.37 2014/11/09 18:08:07 maxv Exp $ */ +/* $NetBSD: layer_subr.c,v 1.38 2020/04/13 19:23:19 ad Exp $ */ /* * Copyright (c) 1999 National Aeronautics & Space Administration @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: layer_subr.c,v 1.37 2014/11/09 18:08:07 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: layer_subr.c,v 1.38 2020/04/13 19:23:19 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -127,7 +127,7 @@ layer_node_create(struct mount *mp, stru * reference to the lower node. */ vrele(lowervp); - KASSERT(lowervp->v_usecount > 0); + KASSERT(vrefcnt(lowervp) > 0); #ifdef LAYERFS_DIAGNOSTIC if (layerfs_debug) @@ -167,7 +167,7 @@ layer_checkvp(struct vnode *vp, const ch /* wait for debugger */ panic("layer_checkvp"); } - if (a->layer_lowervp->v_usecount < 1) { + if (vrefcnt(a->layer_lowervp) < 1) { int i; u_long *p; printf("vp = %p, unref'ed lowervp\n", vp); for (p = (u_long *) a, i = 0; i < 8; i++) @@ -178,8 +178,8 @@ layer_checkvp(struct vnode *vp, const ch }; #ifdef notnow printf("layer %p/%d -> %p/%d [%s, %d]\n", - LAYERTOV(a), LAYERTOV(a)->v_usecount, - a->layer_lowervp, a->layer_lowervp->v_usecount, + LAYERTOV(a), vrefcnt(LAYERTOV(a)), + a->layer_lowervp, vrefcnt(a->layer_lowervp), fil, lno); #endif return a->layer_lowervp; Index: src/sys/miscfs/genfs/layer_vnops.c diff -u src/sys/miscfs/genfs/layer_vnops.c:1.69 src/sys/miscfs/genfs/layer_vnops.c:1.70 --- src/sys/miscfs/genfs/layer_vnops.c:1.69 Sat Apr 4 20:49:30 2020 +++ src/sys/miscfs/genfs/layer_vnops.c Mon Apr 13 19:23:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: layer_vnops.c,v 1.69 2020/04/04 20:49:30 ad Exp $ */ +/* $NetBSD: layer_vnops.c,v 1.70 2020/04/13 19:23:19 ad 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.69 2020/04/04 20:49:30 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.70 2020/04/13 19:23:19 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -692,7 +692,7 @@ layer_revoke(void *v) int error; /* - * We will most likely end up in vclean which uses the v_usecount + * We will most likely end up in vclean which uses the usecount * to determine if a vnode is active. Take an extra reference on * the lower vnode so it will always close and inactivate. */ Index: src/sys/miscfs/nullfs/null_vfsops.c diff -u src/sys/miscfs/nullfs/null_vfsops.c:1.98 src/sys/miscfs/nullfs/null_vfsops.c:1.99 --- src/sys/miscfs/nullfs/null_vfsops.c:1.98 Sat Apr 4 20:49:30 2020 +++ src/sys/miscfs/nullfs/null_vfsops.c Mon Apr 13 19:23:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: null_vfsops.c,v 1.98 2020/04/04 20:49:30 ad Exp $ */ +/* $NetBSD: null_vfsops.c,v 1.99 2020/04/13 19:23:19 ad Exp $ */ /* * Copyright (c) 1999 National Aeronautics & Space Administration @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.98 2020/04/04 20:49:30 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.99 2020/04/13 19:23:19 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -190,7 +190,7 @@ nullfs_unmount(struct mount *mp, int mnt if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - if (null_rootvp->v_usecount > 1 && (mntflags & MNT_FORCE) == 0) + if (vrefcnt(null_rootvp) > 1 && (mntflags & MNT_FORCE) == 0) return EBUSY; if ((error = vflush(mp, null_rootvp, flags)) != 0) Index: src/sys/miscfs/overlay/overlay_vfsops.c diff -u src/sys/miscfs/overlay/overlay_vfsops.c:1.70 src/sys/miscfs/overlay/overlay_vfsops.c:1.71 --- src/sys/miscfs/overlay/overlay_vfsops.c:1.70 Sat Mar 21 16:30:39 2020 +++ src/sys/miscfs/overlay/overlay_vfsops.c Mon Apr 13 19:23:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: overlay_vfsops.c,v 1.70 2020/03/21 16:30:39 pgoyette Exp $ */ +/* $NetBSD: overlay_vfsops.c,v 1.71 2020/04/13 19:23:19 ad Exp $ */ /* * Copyright (c) 1999, 2000 National Aeronautics & Space Administration @@ -74,7 +74,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.70 2020/03/21 16:30:39 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.71 2020/04/13 19:23:19 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -215,7 +215,7 @@ ov_unmount(struct mount *mp, int mntflag if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - if (overlay_rootvp->v_usecount > 1 && (mntflags & MNT_FORCE) == 0) + if (vrefcnt(overlay_rootvp) > 1 && (mntflags & MNT_FORCE) == 0) return (EBUSY); if ((error = vflush(mp, overlay_rootvp, flags)) != 0) return (error); Index: src/sys/miscfs/umapfs/umap_vfsops.c diff -u src/sys/miscfs/umapfs/umap_vfsops.c:1.102 src/sys/miscfs/umapfs/umap_vfsops.c:1.103 --- src/sys/miscfs/umapfs/umap_vfsops.c:1.102 Mon Mar 16 21:20:11 2020 +++ src/sys/miscfs/umapfs/umap_vfsops.c Mon Apr 13 19:23:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: umap_vfsops.c,v 1.102 2020/03/16 21:20:11 pgoyette Exp $ */ +/* $NetBSD: umap_vfsops.c,v 1.103 2020/04/13 19:23:19 ad Exp $ */ /* * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.102 2020/03/16 21:20:11 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.103 2020/04/13 19:23:19 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -274,7 +274,7 @@ umapfs_unmount(struct mount *mp, int mnt if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - if (rtvp->v_usecount > 1 && (mntflags & MNT_FORCE) == 0) + if (vrefcnt(rtvp) > 1 && (mntflags & MNT_FORCE) == 0) return (EBUSY); if ((error = vflush(mp, rtvp, flags)) != 0) return (error); Index: src/sys/nfs/nfs_vfsops.c diff -u src/sys/nfs/nfs_vfsops.c:1.240 src/sys/nfs/nfs_vfsops.c:1.241 --- src/sys/nfs/nfs_vfsops.c:1.240 Mon Mar 16 21:20:11 2020 +++ src/sys/nfs/nfs_vfsops.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_vfsops.c,v 1.240 2020/03/16 21:20:11 pgoyette Exp $ */ +/* $NetBSD: nfs_vfsops.c,v 1.241 2020/04/13 19:23:20 ad Exp $ */ /* * Copyright (c) 1989, 1993, 1995 @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.240 2020/03/16 21:20:11 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_vfsops.c,v 1.241 2020/04/13 19:23:20 ad Exp $"); #if defined(_KERNEL_OPT) #include "opt_nfs.h" @@ -863,7 +863,7 @@ nfs_unmount(struct mount *mp, int mntfla if (error != 0) goto err; - if ((mntflags & MNT_FORCE) == 0 && vp->v_usecount > 1) { + if ((mntflags & MNT_FORCE) == 0 && vrefcnt(vp) > 1) { VOP_UNLOCK(vp); error = EBUSY; goto err; Index: src/sys/nfs/nfs_vnops.c diff -u src/sys/nfs/nfs_vnops.c:1.313 src/sys/nfs/nfs_vnops.c:1.314 --- src/sys/nfs/nfs_vnops.c:1.313 Sun Feb 23 15:46:41 2020 +++ src/sys/nfs/nfs_vnops.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_vnops.c,v 1.313 2020/02/23 15:46:41 ad Exp $ */ +/* $NetBSD: nfs_vnops.c,v 1.314 2020/04/13 19:23:20 ad Exp $ */ /* * Copyright (c) 1989, 1993 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.313 2020/02/23 15:46:41 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.314 2020/04/13 19:23:20 ad Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -1729,7 +1729,7 @@ again: * To try and make nfs semantics closer to ufs semantics, a file that has * other processes using the vnode is renamed instead of removed and then * removed later on the last close. - * - If v_usecount > 1 + * - If vrefcnt(vp) > 1 * If a rename is not already in the works * call nfs_sillyrename() to set it up * else @@ -1752,12 +1752,12 @@ nfs_remove(void *v) struct vattr vattr; #ifndef DIAGNOSTIC - if (vp->v_usecount < 1) - panic("nfs_remove: bad v_usecount"); + if (vrefcnt(vp) < 1) + panic("nfs_remove: bad vrefcnt(vp)"); #endif if (vp->v_type == VDIR) error = EPERM; - else if (vp->v_usecount == 1 || (np->n_sillyrename && + else if (vrefcnt(vp) == 1 || (np->n_sillyrename && VOP_GETATTR(vp, &vattr, cnp->cn_cred) == 0 && vattr.va_nlink > 1)) { /* @@ -1886,7 +1886,7 @@ nfs_rename(void *v) * so that we don't lose the file if the rename fails, and so * that there's no window when the "to" file doesn't exist. */ - if (tvp && tvp->v_usecount > 1 && !VTONFS(tvp)->n_sillyrename && + if (tvp && vrefcnt(tvp) > 1 && !VTONFS(tvp)->n_sillyrename && tvp->v_type != VDIR && !nfs_sillyrename(tdvp, tvp, tcnp, true)) { VN_KNOTE(tvp, NOTE_DELETE); vput(tvp); @@ -3443,7 +3443,7 @@ nfsspec_close(void *v) if (np->n_flag & (NACC | NUPD)) { np->n_flag |= NCHG; - if (vp->v_usecount == 1 && + if (vrefcnt(vp) == 1 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) { vattr_null(&vattr); if (np->n_flag & NACC) @@ -3527,7 +3527,7 @@ nfsfifo_close(void *v) if (np->n_flag & NUPD) np->n_mtim = ts; np->n_flag |= NCHG; - if (vp->v_usecount == 1 && + if (vrefcnt(vp) == 1 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) { vattr_null(&vattr); if (np->n_flag & NACC) Index: src/sys/rump/librump/rumpvfs/rump_vfs.c diff -u src/sys/rump/librump/rumpvfs/rump_vfs.c:1.90 src/sys/rump/librump/rumpvfs/rump_vfs.c:1.91 --- src/sys/rump/librump/rumpvfs/rump_vfs.c:1.90 Sun Feb 23 15:46:42 2020 +++ src/sys/rump/librump/rumpvfs/rump_vfs.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: rump_vfs.c,v 1.90 2020/02/23 15:46:42 ad Exp $ */ +/* $NetBSD: rump_vfs.c,v 1.91 2020/04/13 19:23:20 ad Exp $ */ /* * Copyright (c) 2008 Antti Kantee. All Rights Reserved. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.90 2020/02/23 15:46:42 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.91 2020/04/13 19:23:20 ad Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -382,7 +382,7 @@ int rump_vp_getref(struct vnode *vp) { - return vp->v_usecount; + return vrefcnt(vp); } void Index: src/sys/rump/librump/rumpvfs/rumpfs.c diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.155 src/sys/rump/librump/rumpvfs/rumpfs.c:1.156 --- src/sys/rump/librump/rumpvfs/rumpfs.c:1.155 Sat Apr 4 19:24:51 2020 +++ src/sys/rump/librump/rumpvfs/rumpfs.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpfs.c,v 1.155 2020/04/04 19:24:51 kamil Exp $ */ +/* $NetBSD: rumpfs.c,v 1.156 2020/04/13 19:23:20 ad 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.155 2020/04/04 19:24:51 kamil Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.156 2020/04/13 19:23:20 ad Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -1906,7 +1906,7 @@ rumpfs_unmount(struct mount *mp, int mnt if (panicstr || mntflags & MNT_FORCE) flags |= FORCECLOSE; - if (rfsmp->rfsmp_rvp->v_usecount > 1 && (flags & FORCECLOSE) == 0) + if (vrefcnt(rfsmp->rfsmp_rvp) > 1 && (flags & FORCECLOSE) == 0) return EBUSY; if ((error = vflush(mp, rfsmp->rfsmp_rvp, flags)) != 0) Index: src/sys/sys/vnode.h diff -u src/sys/sys/vnode.h:1.294 src/sys/sys/vnode.h:1.295 --- src/sys/sys/vnode.h:1.294 Sun Mar 22 18:32:42 2020 +++ src/sys/sys/vnode.h Mon Apr 13 19:23:20 2020 @@ -1,7 +1,7 @@ -/* $NetBSD: vnode.h,v 1.294 2020/03/22 18:32:42 ad Exp $ */ +/* $NetBSD: vnode.h,v 1.295 2020/04/13 19:23:20 ad Exp $ */ /*- - * Copyright (c) 2008 The NetBSD Foundation, Inc. + * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -516,6 +516,7 @@ int vdead_check(struct vnode *, int); void vrevoke(struct vnode *); void vremfree(struct vnode *); void vshareilock(struct vnode *, struct vnode *); +int vrefcnt(struct vnode *); int vcache_get(struct mount *, const void *, size_t, struct vnode **); int vcache_new(struct mount *, struct vnode *, struct vattr *, kauth_cred_t, void *, struct vnode **); Index: src/sys/ufs/lfs/lfs_vnops.c diff -u src/sys/ufs/lfs/lfs_vnops.c:1.331 src/sys/ufs/lfs/lfs_vnops.c:1.332 --- src/sys/ufs/lfs/lfs_vnops.c:1.331 Sun Feb 23 15:46:42 2020 +++ src/sys/ufs/lfs/lfs_vnops.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_vnops.c,v 1.331 2020/02/23 15:46:42 ad Exp $ */ +/* $NetBSD: lfs_vnops.c,v 1.332 2020/04/13 19:23:20 ad 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.331 2020/02/23 15:46:42 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.332 2020/04/13 19:23:20 ad Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1346,7 +1346,7 @@ lfs_close(void *v) vp->v_mount->mnt_iflag & IMNT_UNMOUNT) return 0; - if (vp->v_usecount > 1 && vp != ip->i_lfs->lfs_ivnode) { + if (vrefcnt(vp) > 1 && vp != ip->i_lfs->lfs_ivnode) { LFS_ITIMES(ip, NULL, NULL, NULL); } return (0); @@ -1373,7 +1373,7 @@ lfsspec_close(void *v) KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE); ip = VTOI(vp); - if (vp->v_usecount > 1) { + if (vrefcnt(vp) > 1) { LFS_ITIMES(ip, NULL, NULL, NULL); } return (VOCALL (spec_vnodeop_p, VOFFSET(vop_close), ap)); @@ -1400,7 +1400,7 @@ lfsfifo_close(void *v) KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE); ip = VTOI(vp); - if (ap->a_vp->v_usecount > 1) { + if (vrefcnt(ap->a_vp) > 1) { LFS_ITIMES(ip, NULL, NULL, NULL); } return (VOCALL (fifo_vnodeop_p, VOFFSET(vop_close), ap)); Index: src/sys/ufs/mfs/mfs_vnops.c diff -u src/sys/ufs/mfs/mfs_vnops.c:1.59 src/sys/ufs/mfs/mfs_vnops.c:1.60 --- src/sys/ufs/mfs/mfs_vnops.c:1.59 Wed Feb 20 10:03:55 2019 +++ src/sys/ufs/mfs/mfs_vnops.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: mfs_vnops.c,v 1.59 2019/02/20 10:03:55 hannken Exp $ */ +/* $NetBSD: mfs_vnops.c,v 1.60 2020/04/13 19:23:20 ad Exp $ */ /* * Copyright (c) 1989, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.59 2019/02/20 10:03:55 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mfs_vnops.c,v 1.60 2020/04/13 19:23:20 ad Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -140,7 +140,7 @@ mfs_strategy(void *v) struct buf *bp = ap->a_bp; struct mfsnode *mfsp; - if (vp->v_type != VBLK || vp->v_usecount == 0) + if (vp->v_type != VBLK || vrefcnt(vp) == 0) panic("mfs_strategy: bad dev"); mfsp = VTOMFS(vp); /* check for mini-root access */ Index: src/sys/ufs/ufs/ufs_vnops.c diff -u src/sys/ufs/ufs/ufs_vnops.c:1.250 src/sys/ufs/ufs/ufs_vnops.c:1.251 --- src/sys/ufs/ufs/ufs_vnops.c:1.250 Sat Apr 4 20:49:31 2020 +++ src/sys/ufs/ufs/ufs_vnops.c Mon Apr 13 19:23:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_vnops.c,v 1.250 2020/04/04 20:49:31 ad Exp $ */ +/* $NetBSD: ufs_vnops.c,v 1.251 2020/04/13 19:23:20 ad Exp $ */ /*- * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.250 2020/04/04 20:49:31 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.251 2020/04/13 19:23:20 ad Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -250,7 +250,7 @@ ufs_close(void *v) struct vnode *vp; vp = ap->a_vp; - if (vp->v_usecount > 1) + if (vrefcnt(vp) > 1) UFS_ITIMES(vp, NULL, NULL, NULL); return (0); } @@ -1669,7 +1669,7 @@ ufsspec_close(void *v) struct vnode *vp; vp = ap->a_vp; - if (vp->v_usecount > 1) + if (vrefcnt(vp) > 1) UFS_ITIMES(vp, NULL, NULL, NULL); return (VOCALL (spec_vnodeop_p, VOFFSET(vop_close), ap)); } @@ -1730,7 +1730,7 @@ ufsfifo_close(void *v) struct vnode *vp; vp = ap->a_vp; - if (ap->a_vp->v_usecount > 1) + if (vrefcnt(ap->a_vp) > 1) UFS_ITIMES(vp, NULL, NULL, NULL); return (VOCALL (fifo_vnodeop_p, VOFFSET(vop_close), ap)); }