Module Name: src Committed By: hannken Date: Mon Jan 2 10:33:28 UTC 2017
Modified Files: src/distrib/sets/lists/comp: mi src/share/man/man9: Makefile vnode.9 vnsubr.9 src/sys/kern: vfs_cache.c vfs_mount.c vfs_subr.c vfs_vnode.c src/sys/miscfs/specfs: spec_vnops.c src/sys/sys: param.h vnode.h vnode_impl.h Log Message: Rename vget() to vcache_vget() and vcache_tryvget() respectively and move the definitions to sys/vnode_impl.h. No functional change intended. Welcome to 7.99.54 To generate a diff of this commit: cvs rdiff -u -r1.2089 -r1.2090 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.399 -r1.400 src/share/man/man9/Makefile cvs rdiff -u -r1.73 -r1.74 src/share/man/man9/vnode.9 cvs rdiff -u -r1.43 -r1.44 src/share/man/man9/vnsubr.9 cvs rdiff -u -r1.110 -r1.111 src/sys/kern/vfs_cache.c cvs rdiff -u -r1.42 -r1.43 src/sys/kern/vfs_mount.c cvs rdiff -u -r1.452 -r1.453 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.65 -r1.66 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.167 -r1.168 src/sys/miscfs/specfs/spec_vnops.c cvs rdiff -u -r1.520 -r1.521 src/sys/sys/param.h cvs rdiff -u -r1.267 -r1.268 src/sys/sys/vnode.h cvs rdiff -u -r1.4 -r1.5 src/sys/sys/vnode_impl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.2089 src/distrib/sets/lists/comp/mi:1.2090 --- src/distrib/sets/lists/comp/mi:1.2089 Mon Jan 2 10:28:35 2017 +++ src/distrib/sets/lists/comp/mi Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.2089 2017/01/02 10:28:35 roy Exp $ +# $NetBSD: mi,v 1.2090 2017/01/02 10:33:28 hannken Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. ./etc/mtree/set.comp comp-sys-root @@ -11234,7 +11234,7 @@ ./usr/share/man/cat9/vfs_write_suspend.0 comp-obsolete obsolete ./usr/share/man/cat9/vfsops.0 comp-sys-catman .cat ./usr/share/man/cat9/vfssubr.0 comp-sys-catman .cat -./usr/share/man/cat9/vget.0 comp-sys-catman .cat +./usr/share/man/cat9/vget.0 comp-sys-catman obsolete ./usr/share/man/cat9/vgone.0 comp-sys-catman .cat ./usr/share/man/cat9/vgonel.0 comp-sys-catman .cat ./usr/share/man/cat9/vhold.0 comp-sys-catman .cat @@ -18418,7 +18418,7 @@ ./usr/share/man/html9/vfs_vnode_iterator_next.html comp-sys-htmlman html ./usr/share/man/html9/vfsops.html comp-sys-htmlman html ./usr/share/man/html9/vfssubr.html comp-sys-htmlman html -./usr/share/man/html9/vget.html comp-sys-htmlman html +./usr/share/man/html9/vget.html comp-sys-htmlman obsolete ./usr/share/man/html9/vgone.html comp-sys-htmlman html ./usr/share/man/html9/vgonel.html comp-sys-htmlman html ./usr/share/man/html9/vhold.html comp-sys-htmlman html @@ -25842,7 +25842,7 @@ ./usr/share/man/man9/vfs_write_suspend.9 comp-obsolete obsolete ./usr/share/man/man9/vfsops.9 comp-sys-man .man ./usr/share/man/man9/vfssubr.9 comp-sys-man .man -./usr/share/man/man9/vget.9 comp-sys-man .man +./usr/share/man/man9/vget.9 comp-sys-man obsolete ./usr/share/man/man9/vgone.9 comp-sys-man .man ./usr/share/man/man9/vgonel.9 comp-sys-man .man ./usr/share/man/man9/vhold.9 comp-sys-man .man Index: src/share/man/man9/Makefile diff -u src/share/man/man9/Makefile:1.399 src/share/man/man9/Makefile:1.400 --- src/share/man/man9/Makefile:1.399 Thu Dec 22 11:46:48 2016 +++ src/share/man/man9/Makefile Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.399 2016/12/22 11:46:48 cherry Exp $ +# $NetBSD: Makefile,v 1.400 2017/01/02 10:33:28 hannken Exp $ # Makefile for section 9 (kernel function and variable) manual pages. @@ -949,7 +949,6 @@ MLINKS+=vmem.9 vmem_alloc.9 \ MLINKS+=vnode.9 vref.9 \ vnode.9 vrele.9 \ vnode.9 vrele_async.9 \ - vnode.9 vget.9 \ vnode.9 vput.9 \ vnode.9 vhold.9 \ vnode.9 holdrele.9 \ Index: src/share/man/man9/vnode.9 diff -u src/share/man/man9/vnode.9:1.73 src/share/man/man9/vnode.9:1.74 --- src/share/man/man9/vnode.9:1.73 Wed Dec 14 15:48:54 2016 +++ src/share/man/man9/vnode.9 Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: vnode.9,v 1.73 2016/12/14 15:48:54 hannken Exp $ +.\" $NetBSD: vnode.9,v 1.74 2017/01/02 10:33:28 hannken Exp $ .\" .\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd December 14, 2016 +.Dd January 2, 2017 .Dt VNODE 9 .Os .Sh NAME @@ -35,7 +35,6 @@ .Nm vref , .Nm vrele , .Nm vrele_async , -.Nm vget , .Nm vput , .Nm vhold , .Nm holdrele , @@ -68,8 +67,6 @@ .Fn vrele "struct vnode *vp" .Ft void .Fn vrele_async "struct vnode *vp" -.Ft int -.Fn vget "struct vnode *vp" "int lockflag" "int wait" .Ft void .Fn vput "struct vnode *vp" .Ft void @@ -152,12 +149,10 @@ When a file system retrieves a vnode fro have any users, and another thread in the system may be simultaneously deciding to reclaim it. Thus, to retrieve a vnode from a cache, one must use -.Fn vget , +.Fn vcache_get , not .Fn vref , -to acquire the first reference, and be prepared for -.Fn vget -to fail if another thread is reclaiming the vnode. +to acquire the first reference. .Pp The vnode has the following structure: .Bd -literal @@ -349,10 +344,8 @@ See .Xr vnodeops 9 for a description of vnode operations. .Pp -When a valid vnode which is cached is used again, the user must call -.Fn vget -to increment the reference count. -When a user wants a new vnode for another file, +When a user wants a new vnode for another file or wants a valid vnode +which is cached, .Fn vcache_get or .Fn vcache_new @@ -540,60 +533,6 @@ are zero, the vnode is cached. .It Fn vrele_async "vp" Will asychronously release the vnode in different context than the caller, sometime after the call. -.It Fn vget "vp" "lockflags" "wait" -Reclaim vnode -.Fa vp -from the cache and increment its reference count. -.Pp -The vnode -.Fa vp -may be changing state: another thread may be initializing it from disk, -or revoking it with -.Xr revoke 2 , -or reclaiming it with -.Xr VOP_RECLAIM 9 . -In that case, -.Fn vget -will wait until the state has changed, if -.Fa lockflags -is -.Li 0 -and -.Fa wait -is -.Li true ; -or will return -.Er EBUSY -if -.Fa lockflags -is -.Dv LK_NOWAIT -and -.Fa wait -is -.Li false . -.Pp -(The extra argument enables the compiler to detect old code which -additionally used -.Fn vget -to lock the vnode.) -.Pp -Returns -.Bl -tag -offset abcd -width ENOENT -compact -.It Er EBUSY -if -.Fa vp -was changing state and -.Fa wait -is false. -.It Er ENOENT -if the system was reclaiming -.Fa vp -with -.Xr VOP_RECLAIM 9 . -.It Li 0 -on success. -.El .It Fn vput "vp" Legacy convenience routine for unlocking and releasing .Fa vp . @@ -603,11 +542,6 @@ Equivalent to: .No "vrele(" Ns Fa vp Ns Li ");" .Ed .Pp -Note that this is -.Em not -an inverse of -.Fn vget . -The name appears so for hysterical raisins. New code should prefer using .Xr VOP_UNLOCK 9 and Index: src/share/man/man9/vnsubr.9 diff -u src/share/man/man9/vnsubr.9:1.43 src/share/man/man9/vnsubr.9:1.44 --- src/share/man/man9/vnsubr.9:1.43 Sat Jul 11 15:42:31 2015 +++ src/share/man/man9/vnsubr.9 Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: vnsubr.9,v 1.43 2015/07/11 15:42:31 wiz Exp $ +.\" $NetBSD: vnsubr.9,v 1.44 2017/01/02 10:33:28 hannken Exp $ .\" .\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -146,9 +146,6 @@ appropriate error code is returned. .Pp .Fn vn_lock must not be called when the vnode's reference count is zero. -Instead, -.Xr vget 9 -should be used. .It Fn vn_markexec "vp" Common code to mark the vnode .Fa vp Index: src/sys/kern/vfs_cache.c diff -u src/sys/kern/vfs_cache.c:1.110 src/sys/kern/vfs_cache.c:1.111 --- src/sys/kern/vfs_cache.c:1.110 Thu Jul 7 06:55:43 2016 +++ src/sys/kern/vfs_cache.c Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_cache.c,v 1.110 2016/07/07 06:55:43 msaitoh Exp $ */ +/* $NetBSD: vfs_cache.c,v 1.111 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.110 2016/07/07 06:55:43 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_cache.c,v 1.111 2017/01/02 10:33:28 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -71,7 +71,7 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_cache.c, #include <sys/sysctl.h> #include <sys/time.h> #include <sys/mount.h> -#include <sys/vnode.h> +#include <sys/vnode_impl.h> #include <sys/namei.h> #include <sys/errno.h> #include <sys/pool.h> @@ -101,8 +101,8 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_cache.c, * is for DELETE, or NOCACHE is set (rewrite), and the * name is located in the cache, it will be dropped. * The entry is dropped also when it was not possible to lock - * the cached vnode, either because vget() failed or the generation - * number has changed while waiting for the lock. + * the cached vnode, either because vcache_tryvget() failed or + * the generation number has changed while waiting for the lock. */ /* @@ -588,9 +588,9 @@ cache_lookup(struct vnode *dvp, const ch mutex_exit(&cpup->cpu_lock); /* - * Unlocked except for the vnode interlock. Call vget(). + * Unlocked except for the vnode interlock. Call vcache_tryvget(). */ - error = vget(vp, LK_NOWAIT, false /* !wait */); + error = vcache_tryvget(vp); if (error) { KASSERT(error == EBUSY); /* @@ -669,9 +669,9 @@ cache_lookup_raw(struct vnode *dvp, cons mutex_exit(&cpup->cpu_lock); /* - * Unlocked except for the vnode interlock. Call vget(). + * Unlocked except for the vnode interlock. Call vcache_tryvget(). */ - error = vget(vp, LK_NOWAIT, false /* !wait */); + error = vcache_tryvget(vp); if (error) { KASSERT(error == EBUSY); /* @@ -761,7 +761,7 @@ cache_revlookup(struct vnode *vp, struct mutex_enter(dvp->v_interlock); mutex_exit(&ncp->nc_lock); mutex_exit(namecache_lock); - error = vget(dvp, LK_NOWAIT, false /* !wait */); + error = vcache_tryvget(dvp); if (error) { KASSERT(error == EBUSY); if (bufp) Index: src/sys/kern/vfs_mount.c diff -u src/sys/kern/vfs_mount.c:1.42 src/sys/kern/vfs_mount.c:1.43 --- src/sys/kern/vfs_mount.c:1.42 Wed Dec 14 15:46:57 2016 +++ src/sys/kern/vfs_mount.c Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.42 2016/12/14 15:46:57 hannken Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.43 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.42 2016/12/14 15:46:57 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.43 2017/01/02 10:33:28 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -402,7 +402,7 @@ again: TAILQ_INSERT_AFTER(&mp->mnt_vnodelist, vp, mvp, v_mntvnodes); mvp->v_usecount = 1; mutex_exit(&mntvnode_lock); - error = vget(vp, 0, true /* wait */); + error = vcache_vget(vp); KASSERT(error == 0 || error == ENOENT); } while (error != 0); @@ -553,7 +553,7 @@ vflush(struct mount *mp, vnode_t *skipvp if (vp != NULL) { mutex_enter(vp->v_interlock); mutex_exit(&mntvnode_lock); - error = vget(vp, 0, true /* wait */); + error = vcache_vget(vp); if (error == ENOENT) continue; else if (error == 0) Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.452 src/sys/kern/vfs_subr.c:1.453 --- src/sys/kern/vfs_subr.c:1.452 Wed Dec 14 15:48:55 2016 +++ src/sys/kern/vfs_subr.c Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.452 2016/12/14 15:48:55 hannken Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.453 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.452 2016/12/14 15:48:55 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.453 2017/01/02 10:33:28 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -736,7 +736,7 @@ lazy_sync_vnode(struct vnode *vp) /* We are locking in the wrong direction. */ if (mutex_tryenter(vp->v_interlock)) { mutex_exit(&syncer_data_lock); - if (vget(vp, LK_NOWAIT, false /* !wait */) == 0) { + if (vcache_tryvget(vp) == 0) { if (vn_lock(vp, LK_EXCLUSIVE | LK_NOWAIT) == 0) { synced = true; (void) VOP_FSYNC(vp, curlwp->l_cred, Index: src/sys/kern/vfs_vnode.c diff -u src/sys/kern/vfs_vnode.c:1.65 src/sys/kern/vfs_vnode.c:1.66 --- src/sys/kern/vfs_vnode.c:1.65 Tue Dec 27 11:59:36 2016 +++ src/sys/kern/vfs_vnode.c Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnode.c,v 1.65 2016/12/27 11:59:36 hannken Exp $ */ +/* $NetBSD: vfs_vnode.c,v 1.66 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -76,7 +76,7 @@ * starts in one of the following ways: * * - Allocation, via vcache_get(9) or vcache_new(9). - * - Reclamation of inactive vnode, via vget(9). + * - Reclamation of inactive vnode, via vcache_vget(9). * * Recycle from a free list, via getnewvnode(9) -> getcleanvnode(9) * was another, traditional way. Currently, only the draining thread @@ -156,7 +156,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.65 2016/12/27 11:59:36 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.66 2017/01/02 10:33:28 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -482,7 +482,7 @@ vdrain_remove(vnode_t *vp) vdrain_retry = true; mutex_exit(&vdrain_lock); - if (vget(vp, 0, true /* wait */) == 0) { + if (vcache_vget(vp) == 0) { if (!vrecycle(vp)) vrele(vp); } @@ -578,63 +578,6 @@ vdrain_thread(void *cookie) } /* - * vget: get a particular vnode from the free list, increment its reference - * count and return it. - * - * => Must be called with v_interlock held. - * - * If state is VS_RECLAIMING, the vnode may be eliminated in vcache_reclaim(). - * In that case, we cannot grab the vnode, so the process is awakened when - * the transition is completed, and an error returned to indicate that the - * vnode is no longer usable. - * - * If state is VS_LOADING or VS_BLOCKED, wait until the vnode enters a - * stable state (VS_ACTIVE or VS_RECLAIMED). - */ -int -vget(vnode_t *vp, int flags, bool waitok) -{ - - KASSERT(mutex_owned(vp->v_interlock)); - KASSERT((flags & ~LK_NOWAIT) == 0); - KASSERT(waitok == ((flags & LK_NOWAIT) == 0)); - - /* - * Before adding a reference, we must remove the vnode - * from its freelist. - */ - if (vp->v_usecount == 0) { - vp->v_usecount = 1; - } else { - atomic_inc_uint(&vp->v_usecount); - } - - /* - * If the vnode is in the process of changing state we wait - * for the change to complete and take care not to return - * a clean vnode. - */ - if (! ISSET(flags, LK_NOWAIT)) - VSTATE_WAIT_STABLE(vp); - if (VSTATE_GET(vp) == VS_RECLAIMED) { - vrelel(vp, 0); - return ENOENT; - } else if (VSTATE_GET(vp) != VS_ACTIVE) { - KASSERT(ISSET(flags, LK_NOWAIT)); - vrelel(vp, 0); - return EBUSY; - } - - /* - * Ok, we got it in good shape. - */ - VSTATE_ASSERT(vp, VS_ACTIVE); - mutex_exit(vp->v_interlock); - - return 0; -} - -/* * vput: unlock and release the reference. */ void @@ -1124,6 +1067,97 @@ vcache_free(vnode_impl_t *node) } /* + * Try to get an initial reference on this cached vnode. + * Returns zero on success, ENOENT if the vnode has been reclaimed and + * EBUSY if the vnode state is unstable. + * + * v_interlock locked on entry and unlocked on exit. + */ +int +vcache_tryvget(vnode_t *vp) +{ + + KASSERT(mutex_owned(vp->v_interlock)); + + /* + * Before adding a reference, we must remove the vnode + * from its freelist. + */ + if (vp->v_usecount == 0) { + vp->v_usecount = 1; + } else { + atomic_inc_uint(&vp->v_usecount); + } + + /* + * If the vnode is in the process of changing state we wait + * for the change to complete and take care not to return + * a clean vnode. + */ + if (VSTATE_GET(vp) == VS_RECLAIMED) { + vrelel(vp, 0); + return ENOENT; + } else if (VSTATE_GET(vp) != VS_ACTIVE) { + vrelel(vp, 0); + return EBUSY; + } + + /* + * Ok, we got it in good shape. + */ + VSTATE_ASSERT(vp, VS_ACTIVE); + mutex_exit(vp->v_interlock); + + return 0; +} + +/* + * Try to get an initial reference on this cached vnode. + * Returns zero on success and ENOENT if the vnode has been reclaimed. + * Will wait for the vnode state to be stable. + * + * v_interlock locked on entry and unlocked on exit. + */ +int +vcache_vget(vnode_t *vp) +{ + + KASSERT(mutex_owned(vp->v_interlock)); + + /* + * Before adding a reference, we must remove the vnode + * from its freelist. + */ + if (vp->v_usecount == 0) { + vp->v_usecount = 1; + } else { + atomic_inc_uint(&vp->v_usecount); + } + + /* + * If the vnode is in the process of changing state we wait + * for the change to complete and take care not to return + * a clean vnode. + */ + VSTATE_WAIT_STABLE(vp); + if (VSTATE_GET(vp) == VS_RECLAIMED) { + vrelel(vp, 0); + return ENOENT; + } else if (VSTATE_GET(vp) != VS_ACTIVE) { + vrelel(vp, 0); + return EBUSY; + } + + /* + * Ok, we got it in good shape. + */ + VSTATE_ASSERT(vp, VS_ACTIVE); + mutex_exit(vp->v_interlock); + + return 0; +} + +/* * Get a vnode / fs node pair by key and return it referenced through vpp. */ int @@ -1167,7 +1201,7 @@ again: vp = VIMPL_TO_VNODE(node); mutex_enter(vp->v_interlock); mutex_exit(&vcache.lock); - error = vget(vp, 0, true /* wait */); + error = vcache_vget(vp); if (error == ENOENT) goto again; if (error == 0) @@ -1282,7 +1316,7 @@ vcache_new(struct mount *mp, struct vnod ovp = VIMPL_TO_VNODE(old_node); mutex_enter(ovp->v_interlock); mutex_exit(&vcache.lock); - error = vget(ovp, 0, true /* wait */); + error = vcache_vget(ovp); KASSERT(error == ENOENT); mutex_enter(&vcache.lock); } Index: src/sys/miscfs/specfs/spec_vnops.c diff -u src/sys/miscfs/specfs/spec_vnops.c:1.167 src/sys/miscfs/specfs/spec_vnops.c:1.168 --- src/sys/miscfs/specfs/spec_vnops.c:1.167 Fri Dec 9 19:13:47 2016 +++ src/sys/miscfs/specfs/spec_vnops.c Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: spec_vnops.c,v 1.167 2016/12/09 19:13:47 nat Exp $ */ +/* $NetBSD: spec_vnops.c,v 1.168 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.167 2016/12/09 19:13:47 nat Exp $"); +__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.168 2017/01/02 10:33:28 hannken Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -68,7 +68,7 @@ __KERNEL_RCSID(0, "$NetBSD: spec_vnops.c #include <sys/buf.h> #include <sys/mount.h> #include <sys/namei.h> -#include <sys/vnode.h> +#include <sys/vnode_impl.h> #include <sys/stat.h> #include <sys/errno.h> #include <sys/ioctl.h> @@ -310,7 +310,7 @@ spec_node_lookup_by_dev(enum vtype type, mutex_enter(vp->v_interlock); } mutex_exit(&device_lock); - error = vget(vp, 0, true /* wait */); + error = vcache_vget(vp); if (error != 0) return error; *vpp = vp; @@ -345,7 +345,7 @@ spec_node_lookup_by_mount(struct mount * } mutex_enter(vq->v_interlock); mutex_exit(&device_lock); - error = vget(vq, 0, true /* wait */); + error = vcache_vget(vq); if (error != 0) return error; *vpp = vq; Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.520 src/sys/sys/param.h:1.521 --- src/sys/sys/param.h:1.520 Wed Dec 28 07:34:33 2016 +++ src/sys/sys/param.h Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.520 2016/12/28 07:34:33 ozaki-r Exp $ */ +/* $NetBSD: param.h,v 1.521 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -67,7 +67,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 799005300 /* NetBSD 7.99.53 */ +#define __NetBSD_Version__ 799005400 /* NetBSD 7.99.54 */ #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \ (m) * 1000000) + (p) * 100) <= __NetBSD_Version__) Index: src/sys/sys/vnode.h diff -u src/sys/sys/vnode.h:1.267 src/sys/sys/vnode.h:1.268 --- src/sys/sys/vnode.h:1.267 Wed Dec 14 15:48:55 2016 +++ src/sys/sys/vnode.h Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode.h,v 1.267 2016/12/14 15:48:55 hannken Exp $ */ +/* $NetBSD: vnode.h,v 1.268 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -518,7 +518,6 @@ void vdevgone(int, int, int, enum vtype) int vfinddev(dev_t, enum vtype, struct vnode **); int vflush(struct mount *, struct vnode *, int); int vflushbuf(struct vnode *, int); -int vget(struct vnode *, int, bool); void vgone(struct vnode *); int vinvalbuf(struct vnode *, int, kauth_cred_t, struct lwp *, bool, int); void vprint(const char *, struct vnode *); Index: src/sys/sys/vnode_impl.h diff -u src/sys/sys/vnode_impl.h:1.4 src/sys/sys/vnode_impl.h:1.5 --- src/sys/sys/vnode_impl.h:1.4 Wed Dec 14 15:48:55 2016 +++ src/sys/sys/vnode_impl.h Mon Jan 2 10:33:28 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode_impl.h,v 1.4 2016/12/14 15:48:55 hannken Exp $ */ +/* $NetBSD: vnode_impl.h,v 1.5 2017/01/02 10:33:28 hannken Exp $ */ /*- * Copyright (c) 2016 The NetBSD Foundation, Inc. @@ -71,6 +71,8 @@ vnode_t * vnalloc_marker(struct mount *); void vnfree_marker(vnode_t *); bool vnis_marker(vnode_t *); +int vcache_vget(vnode_t *); +int vcache_tryvget(vnode_t *); int vfs_drainvnodes(void); #endif /* !_SYS_VNODE_IMPL_H_ */