Module Name: src Committed By: hannken Date: Wed Jan 11 09:08:59 UTC 2017
Modified Files: src/share/man/man9: vnode.9 src/sys/kern: vfs_subr.c vfs_vnode.c src/sys/miscfs/genfs: genfs_vnops.c src/sys/sys: vnode.h vnode_impl.h Log Message: Move vnode member v_lock as vi_lock to vnode_impl.h. To generate a diff of this commit: cvs rdiff -u -r1.77 -r1.78 src/share/man/man9/vnode.9 cvs rdiff -u -r1.456 -r1.457 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.71 -r1.72 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.192 -r1.193 src/sys/miscfs/genfs/genfs_vnops.c cvs rdiff -u -r1.271 -r1.272 src/sys/sys/vnode.h cvs rdiff -u -r1.10 -r1.11 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/share/man/man9/vnode.9 diff -u src/share/man/man9/vnode.9:1.77 src/share/man/man9/vnode.9:1.78 --- src/share/man/man9/vnode.9:1.77 Wed Jan 11 09:07:57 2017 +++ src/share/man/man9/vnode.9 Wed Jan 11 09:08:58 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: vnode.9,v 1.77 2017/01/11 09:07:57 hannken Exp $ +.\" $NetBSD: vnode.9,v 1.78 2017/01/11 09:08:58 hannken Exp $ .\" .\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -180,7 +180,6 @@ struct vnode { } v_un; enum vtype v_type; /* vnode type */ enum vtagtype v_tag; /* type of underlying data */ - struct vnlock v_lock; /* lock for this vnode */ void *v_data; /* private data for fs */ struct klist v_klist; /* notes attached to vnode */ }; @@ -433,9 +432,7 @@ universal disk format file system systemV boot file system .El .Pp -All vnode locking operations use -.Em v_lock . -This lock is acquired by calling +The vnode lock is acquired by calling .Xr vn_lock 9 and released by calling .Xr VOP_UNLOCK 9 . @@ -461,10 +458,8 @@ locking. Multiple-reader locking functions equivalently only in the presence of big-lock SMP locking or a uni-processor machine. The lock may be held while sleeping. -While the -.Em v_lock -is acquired, the holder is guaranteed that the vnode will not be -reclaimed or invalidated. +While the vnode lock is acquired, the holder is guaranteed that the +vnode will not be reclaimed or invalidated. Most file system functions require that you hold the vnode lock on entry. See .Xr lock 9 Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.456 src/sys/kern/vfs_subr.c:1.457 --- src/sys/kern/vfs_subr.c:1.456 Wed Jan 11 09:07:57 2017 +++ src/sys/kern/vfs_subr.c Wed Jan 11 09:08:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.456 2017/01/11 09:07:57 hannken Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.457 2017/01/11 09:08:58 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.456 2017/01/11 09:07:57 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.457 2017/01/11 09:08:58 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1116,7 +1116,7 @@ vprint_common(struct vnode *vp, const ch vp->v_usecount, 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, &vp->v_lock); + (*pr)("%sdata %p lock %p\n", prefix, vp->v_data, &vip->vi_lock); (*pr)("%sstate %s key(%p %zd)", prefix, vstate_name(vip->vi_state), vip->vi_key.vk_mount, vip->vi_key.vk_key_len); Index: src/sys/kern/vfs_vnode.c diff -u src/sys/kern/vfs_vnode.c:1.71 src/sys/kern/vfs_vnode.c:1.72 --- src/sys/kern/vfs_vnode.c:1.71 Wed Jan 11 09:04:37 2017 +++ src/sys/kern/vfs_vnode.c Wed Jan 11 09:08:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnode.c,v 1.71 2017/01/11 09:04:37 hannken Exp $ */ +/* $NetBSD: vfs_vnode.c,v 1.72 2017/01/11 09:08:58 hannken 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.71 2017/01/11 09:04:37 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.72 2017/01/11 09:08:58 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -1022,6 +1022,7 @@ vcache_alloc(void) vip = pool_cache_get(vcache_pool, PR_WAITOK); memset(vip, 0, sizeof(*vip)); + rw_init(&vip->vi_lock); /* SLIST_INIT(&vip->vi_hash); */ /* LIST_INIT(&vip->vi_nclist); */ /* LIST_INIT(&vip->vi_dnclist); */ @@ -1030,7 +1031,6 @@ vcache_alloc(void) uvm_obj_init(&vp->v_uobj, &uvm_vnodeops, true, 0); cv_init(&vp->v_cv, "vnode"); - rw_init(&vp->v_lock); vp->v_usecount = 1; vp->v_type = VNON; vp->v_size = vp->v_writesize = VSIZENOTSET; @@ -1064,7 +1064,7 @@ vcache_free(vnode_impl_t *vip) if (vp->v_type == VBLK || vp->v_type == VCHR) spec_node_destroy(vp); - rw_destroy(&vp->v_lock); + rw_destroy(&vip->vi_lock); uvm_obj_destroy(&vp->v_uobj, true); cv_destroy(&vp->v_cv); pool_cache_put(vcache_pool, vip); Index: src/sys/miscfs/genfs/genfs_vnops.c diff -u src/sys/miscfs/genfs/genfs_vnops.c:1.192 src/sys/miscfs/genfs/genfs_vnops.c:1.193 --- src/sys/miscfs/genfs/genfs_vnops.c:1.192 Mon Mar 24 13:42:40 2014 +++ src/sys/miscfs/genfs/genfs_vnops.c Wed Jan 11 09:08:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: genfs_vnops.c,v 1.192 2014/03/24 13:42:40 hannken Exp $ */ +/* $NetBSD: genfs_vnops.c,v 1.193 2017/01/11 09:08:59 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -57,7 +57,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.192 2014/03/24 13:42:40 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.193 2017/01/11 09:08:59 hannken Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -66,7 +66,7 @@ __KERNEL_RCSID(0, "$NetBSD: genfs_vnops. #include <sys/mount.h> #include <sys/fstrans.h> #include <sys/namei.h> -#include <sys/vnode.h> +#include <sys/vnode_impl.h> #include <sys/fcntl.h> #include <sys/kmem.h> #include <sys/poll.h> @@ -287,14 +287,15 @@ genfs_deadlock(void *v) struct vnode *a_vp; int a_flags; } */ *ap = v; - struct vnode *vp = ap->a_vp; + vnode_t *vp = ap->a_vp; + vnode_impl_t *vip = VNODE_TO_VIMPL(vp); int flags = ap->a_flags; krw_t op; int error; op = (ISSET(flags, LK_EXCLUSIVE) ? RW_WRITER : RW_READER); if (ISSET(flags, LK_NOWAIT)) { - if (! rw_tryenter(&vp->v_lock, op)) + if (! rw_tryenter(&vip->vi_lock, op)) return EBUSY; if (mutex_tryenter(vp->v_interlock)) { error = vdead_check(vp, VDEAD_NOWAIT); @@ -304,25 +305,25 @@ genfs_deadlock(void *v) } else error = EBUSY; if (error) - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); return error; } - rw_enter(&vp->v_lock, op); + rw_enter(&vip->vi_lock, op); mutex_enter(vp->v_interlock); error = vdead_check(vp, VDEAD_NOWAIT); if (error == EBUSY) { - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); error = vdead_check(vp, 0); KASSERT(error == ENOENT); mutex_exit(vp->v_interlock); - rw_enter(&vp->v_lock, op); + rw_enter(&vip->vi_lock, op); mutex_enter(vp->v_interlock); } KASSERT(error == ENOENT); mutex_exit(vp->v_interlock); if (! ISSET(flags, LK_RETRY)) { - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); return ENOENT; } return 0; @@ -337,9 +338,10 @@ genfs_deadunlock(void *v) struct vop_unlock_args /* { struct vnode *a_vp; } */ *ap = v; - struct vnode *vp = ap->a_vp; + vnode_t *vp = ap->a_vp; + vnode_impl_t *vip = VNODE_TO_VIMPL(vp); - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); return 0; } @@ -354,7 +356,8 @@ genfs_lock(void *v) struct vnode *a_vp; int a_flags; } */ *ap = v; - struct vnode *vp = ap->a_vp; + vnode_t *vp = ap->a_vp; + vnode_impl_t *vip = VNODE_TO_VIMPL(vp); struct mount *mp = vp->v_mount; int flags = ap->a_flags; krw_t op; @@ -364,7 +367,7 @@ genfs_lock(void *v) if (ISSET(flags, LK_NOWAIT)) { if (fstrans_start_nowait(mp, FSTRANS_SHARED)) return EBUSY; - if (! rw_tryenter(&vp->v_lock, op)) { + if (! rw_tryenter(&vip->vi_lock, op)) { fstrans_done(mp); return EBUSY; } @@ -374,18 +377,18 @@ genfs_lock(void *v) } else error = EBUSY; if (error) { - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); fstrans_done(mp); } return error; } fstrans_start(mp, FSTRANS_SHARED); - rw_enter(&vp->v_lock, op); + rw_enter(&vip->vi_lock, op); mutex_enter(vp->v_interlock); error = vdead_check(vp, VDEAD_NOWAIT); if (error) { - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); fstrans_done(mp); error = vdead_check(vp, 0); KASSERT(error == ENOENT); @@ -403,10 +406,11 @@ genfs_unlock(void *v) struct vop_unlock_args /* { struct vnode *a_vp; } */ *ap = v; - struct vnode *vp = ap->a_vp; + vnode_t *vp = ap->a_vp; + vnode_impl_t *vip = VNODE_TO_VIMPL(vp); struct mount *mp = vp->v_mount; - rw_exit(&vp->v_lock); + rw_exit(&vip->vi_lock); fstrans_done(mp); return 0; @@ -421,12 +425,13 @@ genfs_islocked(void *v) struct vop_islocked_args /* { struct vnode *a_vp; } */ *ap = v; - struct vnode *vp = ap->a_vp; + vnode_t *vp = ap->a_vp; + vnode_impl_t *vip = VNODE_TO_VIMPL(vp); - if (rw_write_held(&vp->v_lock)) + if (rw_write_held(&vip->vi_lock)) return LK_EXCLUSIVE; - if (rw_read_held(&vp->v_lock)) + if (rw_read_held(&vip->vi_lock)) return LK_SHARED; return 0; Index: src/sys/sys/vnode.h diff -u src/sys/sys/vnode.h:1.271 src/sys/sys/vnode.h:1.272 --- src/sys/sys/vnode.h:1.271 Wed Jan 11 09:07:57 2017 +++ src/sys/sys/vnode.h Wed Jan 11 09:08:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode.h,v 1.271 2017/01/11 09:07:57 hannken Exp $ */ +/* $NetBSD: vnode.h,v 1.272 2017/01/11 09:08:59 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -157,7 +157,6 @@ struct vnode { } v_un; enum vtype v_type; /* :: vnode type */ enum vtagtype v_tag; /* :: type of underlying data */ - krwlock_t v_lock; /* v: lock for this vnode */ void *v_data; /* :: private data for fs */ struct klist v_klist; /* i: notes attached to vnode */ }; Index: src/sys/sys/vnode_impl.h diff -u src/sys/sys/vnode_impl.h:1.10 src/sys/sys/vnode_impl.h:1.11 --- src/sys/sys/vnode_impl.h:1.10 Wed Jan 11 09:07:58 2017 +++ src/sys/sys/vnode_impl.h Wed Jan 11 09:08:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode_impl.h,v 1.10 2017/01/11 09:07:58 hannken Exp $ */ +/* $NetBSD: vnode_impl.h,v 1.11 2017/01/11 09:08:59 hannken Exp $ */ /*- * Copyright (c) 2016 The NetBSD Foundation, Inc. @@ -76,6 +76,7 @@ struct vnode_impl { TAILQ_ENTRY(vnode_impl) vi_synclist; /* s: vnodes with dirty bufs */ TAILQ_ENTRY(vnode_impl) vi_mntvnodes; /* m: vnodes for mount point */ SLIST_ENTRY(vnode_impl) vi_hash; /* c: vnode cache list */ + krwlock_t vi_lock; /* -: lock for this vnode */ struct vcache_key vi_key; /* c: vnode cache key */ }; typedef struct vnode_impl vnode_impl_t;