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;