Module Name: src
Committed By: hannken
Date: Thu Jul 1 13:00:57 UTC 2010
Modified Files:
src/sys/coda: coda_vnops.c
src/sys/fs/adosfs: adutil.c
src/sys/fs/cd9660: cd9660_node.c
src/sys/fs/efs: efs_ihash.c
src/sys/fs/filecorefs: filecore_node.c
src/sys/fs/hfs: hfs_nhash.c
src/sys/fs/ntfs: ntfs_vfsops.c
src/sys/fs/ptyfs: ptyfs_subr.c
src/sys/fs/udf: udf_subr.c
src/sys/fs/union: union_vnops.c
src/sys/kern: vfs_subr.c
src/sys/miscfs/genfs: genfs_vnops.c
src/sys/miscfs/kernfs: kernfs_subr.c
src/sys/miscfs/procfs: procfs_subr.c
src/sys/netsmb: smb_conn.c
src/sys/nfs: nfs_node.c
src/sys/sys: lock.h param.h vnode.h
src/sys/ufs/lfs: lfs_syscalls.c
src/sys/ufs/ufs: ufs_ihash.c
Log Message:
Remove vlockmgr(). Generic vnode lock operations now use a rwlock located
in the vnode. All LK_* flags move from sys/lock.h to sys/vnode.h. Calls
to vlockmgr() in file systems get replaced with VOP_LOCK() or VOP_UNLOCK().
Welcome to 5.99.34.
Discussed on tech-kern.
To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.75 src/sys/coda/coda_vnops.c
cvs rdiff -u -r1.11 -r1.12 src/sys/fs/adosfs/adutil.c
cvs rdiff -u -r1.25 -r1.26 src/sys/fs/cd9660/cd9660_node.c
cvs rdiff -u -r1.4 -r1.5 src/sys/fs/efs/efs_ihash.c
cvs rdiff -u -r1.20 -r1.21 src/sys/fs/filecorefs/filecore_node.c
cvs rdiff -u -r1.9 -r1.10 src/sys/fs/hfs/hfs_nhash.c
cvs rdiff -u -r1.81 -r1.82 src/sys/fs/ntfs/ntfs_vfsops.c
cvs rdiff -u -r1.19 -r1.20 src/sys/fs/ptyfs/ptyfs_subr.c
cvs rdiff -u -r1.105 -r1.106 src/sys/fs/udf/udf_subr.c
cvs rdiff -u -r1.36 -r1.37 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.407 -r1.408 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.181 -r1.182 src/sys/miscfs/genfs/genfs_vnops.c
cvs rdiff -u -r1.20 -r1.21 src/sys/miscfs/kernfs/kernfs_subr.c
cvs rdiff -u -r1.96 -r1.97 src/sys/miscfs/procfs/procfs_subr.c
cvs rdiff -u -r1.25 -r1.26 src/sys/netsmb/smb_conn.c
cvs rdiff -u -r1.111 -r1.112 src/sys/nfs/nfs_node.c
cvs rdiff -u -r1.85 -r1.86 src/sys/sys/lock.h
cvs rdiff -u -r1.368 -r1.369 src/sys/sys/param.h
cvs rdiff -u -r1.220 -r1.221 src/sys/sys/vnode.h
cvs rdiff -u -r1.137 -r1.138 src/sys/ufs/lfs/lfs_syscalls.c
cvs rdiff -u -r1.28 -r1.29 src/sys/ufs/ufs/ufs_ihash.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/coda/coda_vnops.c
diff -u src/sys/coda/coda_vnops.c:1.74 src/sys/coda/coda_vnops.c:1.75
--- src/sys/coda/coda_vnops.c:1.74 Thu Jun 24 13:03:06 2010
+++ src/sys/coda/coda_vnops.c Thu Jul 1 13:00:54 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vnops.c,v 1.74 2010/06/24 13:03:06 hannken Exp $ */
+/* $NetBSD: coda_vnops.c,v 1.75 2010/07/01 13:00:54 hannken Exp $ */
/*
*
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.74 2010/06/24 13:03:06 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.75 2010/07/01 13:00:54 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1775,7 +1775,6 @@
struct vop_lock_args *ap = v;
struct vnode *vp = ap->a_vp;
struct cnode *cp = VTOC(vp);
- int flags = ap->a_flags;
/* upcall decl */
/* locals */
@@ -1786,7 +1785,7 @@
coda_f2s(&cp->c_fid)));
}
- return (vlockmgr(&vp->v_lock, flags));
+ return genfs_lock(v);
}
int
@@ -1805,17 +1804,16 @@
coda_f2s(&cp->c_fid)));
}
- return (vlockmgr(&vp->v_lock, LK_RELEASE));
+ return genfs_unlock(v);
}
int
coda_islocked(void *v)
{
/* true args */
- struct vop_islocked_args *ap = v;
ENTRY;
- return (vlockstatus(&ap->a_vp->v_lock));
+ return genfs_islocked(v);
}
/*
Index: src/sys/fs/adosfs/adutil.c
diff -u src/sys/fs/adosfs/adutil.c:1.11 src/sys/fs/adosfs/adutil.c:1.12
--- src/sys/fs/adosfs/adutil.c:1.11 Sat Mar 14 21:04:23 2009
+++ src/sys/fs/adosfs/adutil.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: adutil.c,v 1.11 2009/03/14 21:04:23 dsl Exp $ */
+/* $NetBSD: adutil.c,v 1.12 2010/07/01 13:00:55 hannken Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adutil.c,v 1.11 2009/03/14 21:04:23 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adutil.c,v 1.12 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/vnode.h>
@@ -87,7 +87,7 @@
void
adosfs_ainshash(struct adosfsmount *amp, struct anode *ap)
{
- vlockmgr(&ap->vp->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(ATOV(ap), LK_EXCLUSIVE);
simple_lock(&adosfs_hashlock);
LIST_INSERT_HEAD(&->anodetab[AHASH(ap->block)], ap, link);
Index: src/sys/fs/cd9660/cd9660_node.c
diff -u src/sys/fs/cd9660/cd9660_node.c:1.25 src/sys/fs/cd9660/cd9660_node.c:1.26
--- src/sys/fs/cd9660/cd9660_node.c:1.25 Thu Jun 24 13:03:09 2010
+++ src/sys/fs/cd9660/cd9660_node.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_node.c,v 1.25 2010/06/24 13:03:09 hannken Exp $ */
+/* $NetBSD: cd9660_node.c,v 1.26 2010/07/01 13:00:55 hannken Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1994
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_node.c,v 1.25 2010/06/24 13:03:09 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_node.c,v 1.26 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -178,7 +178,7 @@
LIST_INSERT_HEAD(ipp, ip, i_hash);
mutex_exit(&cd9660_ihash_lock);
- vlockmgr(&ip->i_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(ITOV(ip), LK_EXCLUSIVE);
}
/*
Index: src/sys/fs/efs/efs_ihash.c
diff -u src/sys/fs/efs/efs_ihash.c:1.4 src/sys/fs/efs/efs_ihash.c:1.5
--- src/sys/fs/efs/efs_ihash.c:1.4 Mon May 5 17:11:16 2008
+++ src/sys/fs/efs/efs_ihash.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: efs_ihash.c,v 1.4 2008/05/05 17:11:16 ad Exp $ */
+/* $NetBSD: efs_ihash.c,v 1.5 2010/07/01 13:00:55 hannken Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: efs_ihash.c,v 1.4 2008/05/05 17:11:16 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: efs_ihash.c,v 1.5 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -167,7 +167,7 @@
KASSERT(mutex_owned(&efs_hashlock));
/* lock the inode, then put it on the appropriate hash list */
- vlockmgr(&eip->ei_vp->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(EFS_ITOV(eip), LK_EXCLUSIVE);
mutex_enter(&efs_ihash_lock);
ipp = &ihashtbl[INOHASH(eip->ei_dev, eip->ei_number)];
Index: src/sys/fs/filecorefs/filecore_node.c
diff -u src/sys/fs/filecorefs/filecore_node.c:1.20 src/sys/fs/filecorefs/filecore_node.c:1.21
--- src/sys/fs/filecorefs/filecore_node.c:1.20 Thu Jun 24 13:03:09 2010
+++ src/sys/fs/filecorefs/filecore_node.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: filecore_node.c,v 1.20 2010/06/24 13:03:09 hannken Exp $ */
+/* $NetBSD: filecore_node.c,v 1.21 2010/07/01 13:00:55 hannken Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1994
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: filecore_node.c,v 1.20 2010/06/24 13:03:09 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: filecore_node.c,v 1.21 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -190,15 +190,13 @@
filecore_ihashins(struct filecore_node *ip)
{
struct ihashhead *ipp;
- struct vnode *vp;
simple_lock(&filecore_ihash_slock);
ipp = &filecorehashtbl[INOHASH(ip->i_dev, ip->i_number)];
LIST_INSERT_HEAD(ipp, ip, i_hash);
simple_unlock(&filecore_ihash_slock);
- vp = ip->i_vnode;
- vlockmgr(&vp->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(ITOV(ip), LK_EXCLUSIVE);
}
/*
Index: src/sys/fs/hfs/hfs_nhash.c
diff -u src/sys/fs/hfs/hfs_nhash.c:1.9 src/sys/fs/hfs/hfs_nhash.c:1.10
--- src/sys/fs/hfs/hfs_nhash.c:1.9 Wed Sep 3 22:57:46 2008
+++ src/sys/fs/hfs/hfs_nhash.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: hfs_nhash.c,v 1.9 2008/09/03 22:57:46 gmcgarry Exp $ */
+/* $NetBSD: hfs_nhash.c,v 1.10 2010/07/01 13:00:55 hannken Exp $ */
/*-
* Copyright (c) 2005, 2007 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hfs_nhash.c,v 1.9 2008/09/03 22:57:46 gmcgarry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hfs_nhash.c,v 1.10 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -150,7 +150,7 @@
struct nhashhead *hpp;
/* lock the inode, then put it on the appropriate hash list */
- vlockmgr(&hp->h_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(HTOV(hp), LK_EXCLUSIVE);
mutex_enter(&hfs_nhash_lock);
hpp = &nhashtbl[HNOHASH(hp->h_dev, hp->h_rec.u.cnid, hp->h_fork)];
Index: src/sys/fs/ntfs/ntfs_vfsops.c
diff -u src/sys/fs/ntfs/ntfs_vfsops.c:1.81 src/sys/fs/ntfs/ntfs_vfsops.c:1.82
--- src/sys/fs/ntfs/ntfs_vfsops.c:1.81 Thu Jun 24 13:03:10 2010
+++ src/sys/fs/ntfs/ntfs_vfsops.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ntfs_vfsops.c,v 1.81 2010/06/24 13:03:10 hannken Exp $ */
+/* $NetBSD: ntfs_vfsops.c,v 1.82 2010/07/01 13:00:55 hannken Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.81 2010/06/24 13:03:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vfsops.c,v 1.82 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -807,7 +807,7 @@
if (ino == NTFS_ROOTINO)
vp->v_vflag |= VV_ROOT;
- if (lkflags & LK_TYPE_MASK) {
+ if (lkflags & (LK_EXCLUSIVE | LK_SHARED)) {
error = vn_lock(vp, lkflags);
if (error) {
vput(vp);
Index: src/sys/fs/ptyfs/ptyfs_subr.c
diff -u src/sys/fs/ptyfs/ptyfs_subr.c:1.19 src/sys/fs/ptyfs/ptyfs_subr.c:1.20
--- src/sys/fs/ptyfs/ptyfs_subr.c:1.19 Thu Jun 24 13:03:10 2010
+++ src/sys/fs/ptyfs/ptyfs_subr.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ptyfs_subr.c,v 1.19 2010/06/24 13:03:10 hannken Exp $ */
+/* $NetBSD: ptyfs_subr.c,v 1.20 2010/07/01 13:00:55 hannken Exp $ */
/*
* Copyright (c) 1993
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ptyfs_subr.c,v 1.19 2010/06/24 13:03:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ptyfs_subr.c,v 1.20 2010/07/01 13:00:55 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -388,7 +388,7 @@
struct ptyfs_hashhead *ppp;
/* lock the ptyfsnode, then put it on the appropriate hash list */
- vlockmgr(&pp->ptyfs_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(PTYFSTOV(pp), LK_EXCLUSIVE);
mutex_enter(&ptyfs_used_slock);
ppp = &ptyfs_used_tbl[PTYHASH(pp->ptyfs_type, pp->ptyfs_pty,
Index: src/sys/fs/udf/udf_subr.c
diff -u src/sys/fs/udf/udf_subr.c:1.105 src/sys/fs/udf/udf_subr.c:1.106
--- src/sys/fs/udf/udf_subr.c:1.105 Sun Jun 6 08:01:31 2010
+++ src/sys/fs/udf/udf_subr.c Thu Jul 1 13:00:55 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_subr.c,v 1.105 2010/06/06 08:01:31 hannken Exp $ */
+/* $NetBSD: udf_subr.c,v 1.106 2010/07/01 13:00:55 hannken Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.105 2010/06/06 08:01:31 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.106 2010/07/01 13:00:55 hannken Exp $");
#endif /* not lint */
@@ -5452,7 +5452,7 @@
/* recycle udf_node */
udf_dispose_node(udf_node);
- vlockmgr(&nvp->v_lock, LK_RELEASE);
+ VOP_UNLOCK(nvp);
nvp->v_data = NULL;
ungetnewvnode(nvp);
@@ -5548,7 +5548,7 @@
/* recycle udf_node */
udf_dispose_node(udf_node);
- vlockmgr(&nvp->v_lock, LK_RELEASE);
+ VOP_UNLOCK(nvp);
nvp->v_data = NULL;
ungetnewvnode(nvp);
@@ -5883,7 +5883,7 @@
udf_do_unreserve_space(ump, NULL, vpart_num, 1);
error_out_unlock:
- vlockmgr(&nvp->v_lock, LK_RELEASE);
+ VOP_UNLOCK(nvp);
error_out_unget:
nvp->v_data = NULL;
Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.36 src/sys/fs/union/union_vnops.c:1.37
--- src/sys/fs/union/union_vnops.c:1.36 Thu Jun 24 13:03:11 2010
+++ src/sys/fs/union/union_vnops.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: union_vnops.c,v 1.36 2010/06/24 13:03:11 hannken Exp $ */
+/* $NetBSD: union_vnops.c,v 1.37 2010/07/01 13:00:56 hannken Exp $ */
/*
* Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.36 2010/06/24 13:03:11 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.37 2010/07/01 13:00:56 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1626,8 +1626,8 @@
int error;
/* XXX unionfs can't handle shared locks yet */
- if ((flags & LK_TYPE_MASK) == LK_SHARED) {
- flags = LK_EXCLUSIVE | (flags & ~LK_TYPE_MASK);
+ if ((flags & LK_SHARED) != 0) {
+ flags = (flags & ~LK_SHARED) | LK_EXCLUSIVE;
}
genfs_nolock(ap);
Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.407 src/sys/kern/vfs_subr.c:1.408
--- src/sys/kern/vfs_subr.c:1.407 Thu Jun 24 13:03:12 2010
+++ src/sys/kern/vfs_subr.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_subr.c,v 1.407 2010/06/24 13:03:12 hannken Exp $ */
+/* $NetBSD: vfs_subr.c,v 1.408 2010/07/01 13:00:56 hannken Exp $ */
/*-
* Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.407 2010/06/24 13:03:12 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.408 2010/07/01 13:00:56 hannken Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -713,7 +713,7 @@
vp->v_type = VBAD;
vp->v_iflag = VI_MARKER;
} else {
- rw_init(&vp->v_lock.vl_lock);
+ rw_init(&vp->v_lock);
}
return vp;
@@ -729,7 +729,7 @@
KASSERT(vp->v_usecount == 0);
if ((vp->v_iflag & VI_MARKER) == 0) {
- rw_destroy(&vp->v_lock.vl_lock);
+ rw_destroy(&vp->v_lock);
mutex_enter(&vnode_free_list_lock);
numvnodes--;
mutex_exit(&vnode_free_list_lock);
@@ -1332,7 +1332,7 @@
* Ok, we got it in good shape. Just locking left.
*/
KASSERT((vp->v_iflag & VI_CLEAN) == 0);
- if (flags & LK_TYPE_MASK) {
+ if (flags & (LK_EXCLUSIVE | LK_SHARED)) {
error = vn_lock(vp, flags | LK_INTERLOCK);
if (error != 0) {
vrele(vp);
@@ -2720,11 +2720,9 @@
void
vprint(const char *label, struct vnode *vp)
{
- struct vnlock *vl;
char bf[96];
int flag;
- vl = &vp->v_lock;
flag = vp->v_iflag | vp->v_vflag | vp->v_uflag;
snprintb(bf, sizeof(bf), vnode_flagbits, flag);
@@ -2736,7 +2734,7 @@
vp, bf, ARRAY_PRINT(vp->v_tag, vnode_tags), vp->v_tag,
ARRAY_PRINT(vp->v_type, vnode_types), vp->v_type,
vp->v_usecount, vp->v_writecount, vp->v_holdcnt,
- vp->v_freelisthd, vp->v_mount, vp->v_data, vl);
+ vp->v_freelisthd, vp->v_mount, vp->v_data, &vp->v_lock);
if (vp->v_data != NULL) {
printf("\t");
VOP_PRINT(vp);
@@ -2915,52 +2913,6 @@
rootfstime = t;
}
-/*
- * Sham lock manager for vnodes. This is a temporary measure.
- */
-int
-vlockmgr(struct vnlock *vl, int flags)
-{
-
- KASSERT((flags & ~(LK_NOWAIT | LK_TYPE_MASK)) == 0);
-
- switch (flags & (LK_NOWAIT | LK_TYPE_MASK)) {
- case LK_SHARED:
- rw_enter(&vl->vl_lock, RW_READER);
- return 0;
-
- case LK_SHARED | LK_NOWAIT:
- return rw_tryenter(&vl->vl_lock, RW_READER) ? 0 : EBUSY;
-
- case LK_EXCLUSIVE:
- rw_enter(&vl->vl_lock, RW_WRITER);
- return 0;
-
- case LK_EXCLUSIVE | LK_NOWAIT:
- return rw_tryenter(&vl->vl_lock, RW_WRITER) ? 0 : EBUSY;
-
- case LK_RELEASE:
- rw_exit(&vl->vl_lock);
- return 0;
-
- default:
- panic("vlockmgr: flags %x", flags);
- }
-}
-
-int
-vlockstatus(struct vnlock *vl)
-{
-
- if (rw_write_held(&vl->vl_lock)) {
- return LK_EXCLUSIVE;
- }
- if (rw_read_held(&vl->vl_lock)) {
- return LK_SHARED;
- }
- return 0;
-}
-
static const uint8_t vttodt_tab[9] = {
DT_UNKNOWN, /* VNON */
DT_REG, /* VREG */
Index: src/sys/miscfs/genfs/genfs_vnops.c
diff -u src/sys/miscfs/genfs/genfs_vnops.c:1.181 src/sys/miscfs/genfs/genfs_vnops.c:1.182
--- src/sys/miscfs/genfs/genfs_vnops.c:1.181 Thu Jun 24 13:03:16 2010
+++ src/sys/miscfs/genfs/genfs_vnops.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: genfs_vnops.c,v 1.181 2010/06/24 13:03:16 hannken Exp $ */
+/* $NetBSD: genfs_vnops.c,v 1.182 2010/07/01 13:00:56 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.181 2010/06/24 13:03:16 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.182 2010/07/01 13:00:56 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -288,8 +288,18 @@
} */ *ap = v;
struct vnode *vp = ap->a_vp;
int flags = ap->a_flags;
+ krw_t op;
- return (vlockmgr(&vp->v_lock, flags));
+ KASSERT((flags & ~(LK_EXCLUSIVE | LK_SHARED | LK_NOWAIT)) == 0);
+
+ op = ((flags & LK_EXCLUSIVE) != 0 ? RW_WRITER : RW_READER);
+
+ if ((flags & LK_NOWAIT) != 0)
+ return (rw_tryenter(&vp->v_lock, op) ? 0 : EBUSY);
+
+ rw_enter(&vp->v_lock, op);
+
+ return 0;
}
/*
@@ -303,7 +313,9 @@
} */ *ap = v;
struct vnode *vp = ap->a_vp;
- return (vlockmgr(&vp->v_lock, LK_RELEASE));
+ rw_exit(&vp->v_lock);
+
+ return 0;
}
/*
@@ -317,7 +329,13 @@
} */ *ap = v;
struct vnode *vp = ap->a_vp;
- return (vlockstatus(&vp->v_lock));
+ if (rw_write_held(&vp->v_lock))
+ return LK_EXCLUSIVE;
+
+ if (rw_read_held(&vp->v_lock))
+ return LK_SHARED;
+
+ return 0;
}
/*
Index: src/sys/miscfs/kernfs/kernfs_subr.c
diff -u src/sys/miscfs/kernfs/kernfs_subr.c:1.20 src/sys/miscfs/kernfs/kernfs_subr.c:1.21
--- src/sys/miscfs/kernfs/kernfs_subr.c:1.20 Sun Mar 15 17:22:38 2009
+++ src/sys/miscfs/kernfs/kernfs_subr.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: kernfs_subr.c,v 1.20 2009/03/15 17:22:38 cegger Exp $ */
+/* $NetBSD: kernfs_subr.c,v 1.21 2010/07/01 13:00:56 hannken Exp $ */
/*
* Copyright (c) 1993
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kernfs_subr.c,v 1.20 2009/03/15 17:22:38 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kernfs_subr.c,v 1.21 2010/07/01 13:00:56 hannken Exp $");
#ifdef _KERNEL_OPT
#include "opt_ipsec.h"
@@ -333,7 +333,7 @@
struct kfs_hashhead *ppp;
/* lock the kfsnode, then put it on the appropriate hash list */
- vlockmgr(&pp->kfs_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(KERNFSTOV(pp), LK_EXCLUSIVE);
mutex_enter(&kfs_ihash_lock);
ppp = &kfs_hashtbl[KFSVALUEHASH(pp->kfs_value)];
Index: src/sys/miscfs/procfs/procfs_subr.c
diff -u src/sys/miscfs/procfs/procfs_subr.c:1.96 src/sys/miscfs/procfs/procfs_subr.c:1.97
--- src/sys/miscfs/procfs/procfs_subr.c:1.96 Thu Jul 1 02:38:31 2010
+++ src/sys/miscfs/procfs/procfs_subr.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs_subr.c,v 1.96 2010/07/01 02:38:31 rmind Exp $ */
+/* $NetBSD: procfs_subr.c,v 1.97 2010/07/01 13:00:56 hannken Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -102,7 +102,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_subr.c,v 1.96 2010/07/01 02:38:31 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_subr.c,v 1.97 2010/07/01 13:00:56 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -620,7 +620,7 @@
struct pfs_hashhead *ppp;
/* lock the pfsnode, then put it on the appropriate hash list */
- vlockmgr(&pp->pfs_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(PFSTOV(pp), LK_EXCLUSIVE);
mutex_enter(&pfs_ihash_lock);
ppp = &pfs_hashtbl[PFSPIDHASH(pp->pfs_pid)];
Index: src/sys/netsmb/smb_conn.c
diff -u src/sys/netsmb/smb_conn.c:1.25 src/sys/netsmb/smb_conn.c:1.26
--- src/sys/netsmb/smb_conn.c:1.25 Wed Mar 18 16:00:24 2009
+++ src/sys/netsmb/smb_conn.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: smb_conn.c,v 1.25 2009/03/18 16:00:24 cegger Exp $ */
+/* $NetBSD: smb_conn.c,v 1.26 2010/07/01 13:00:56 hannken Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smb_conn.c,v 1.25 2009/03/18 16:00:24 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smb_conn.c,v 1.26 2010/07/01 13:00:56 hannken Exp $");
/*
* Connection engine.
@@ -135,7 +135,7 @@
}
static int
-smb_sm_lockvclist(int flags)
+smb_sm_lockvclist(void)
{
int error;
@@ -223,7 +223,7 @@
*vcpp = vcp = NULL;
- error = smb_sm_lockvclist(LK_EXCLUSIVE);
+ error = smb_sm_lockvclist();
if (error)
return error;
fail = smb_sm_lookupint(vcspec, shspec, scred, vcpp);
Index: src/sys/nfs/nfs_node.c
diff -u src/sys/nfs/nfs_node.c:1.111 src/sys/nfs/nfs_node.c:1.112
--- src/sys/nfs/nfs_node.c:1.111 Thu Jun 24 13:03:17 2010
+++ src/sys/nfs/nfs_node.c Thu Jul 1 13:00:56 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_node.c,v 1.111 2010/06/24 13:03:17 hannken Exp $ */
+/* $NetBSD: nfs_node.c,v 1.112 2010/07/01 13:00:56 hannken Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_node.c,v 1.111 2010/06/24 13:03:17 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_node.c,v 1.112 2010/07/01 13:00:56 hannken Exp $");
#ifdef _KERNEL_OPT
#include "opt_nfs.h"
@@ -231,7 +231,7 @@
kauth_cred_hold(np->n_rcred);
np->n_wcred = curlwp->l_cred;
kauth_cred_hold(np->n_wcred);
- vlockmgr(&vp->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(vp, LK_EXCLUSIVE);
NFS_INVALIDATE_ATTRCACHE(np);
uvm_vnp_setsize(vp, 0);
rb_tree_insert_node(&nmp->nm_rbtree, &np->n_rbnode);
Index: src/sys/sys/lock.h
diff -u src/sys/sys/lock.h:1.85 src/sys/sys/lock.h:1.86
--- src/sys/sys/lock.h:1.85 Thu Jun 24 07:54:47 2010
+++ src/sys/sys/lock.h Thu Jul 1 13:00:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: lock.h,v 1.85 2010/06/24 07:54:47 hannken Exp $ */
+/* $NetBSD: lock.h,v 1.86 2010/07/01 13:00:57 hannken Exp $ */
/*-
* Copyright (c) 1999, 2000, 2006, 2007 The NetBSD Foundation, Inc.
@@ -73,16 +73,6 @@
#include <machine/lock.h>
-#define LK_TYPE_MASK 0x0000000f /* type of lock sought */
-#define LK_SHARED 0x00000001 /* shared lock */
-#define LK_EXCLUSIVE 0x00000002 /* exclusive lock */
-#define LK_RELEASE 0x00000006 /* release any type of lock */
-
-#define LK_NOWAIT 0x00000010 /* do not sleep to await lock */
-#define LK_INTERLOCK 0x00010000 /* unlock passed simple lock after
- getting lk_interlock */
-#define LK_RETRY 0x00020000 /* vn_lock: retry until locked */
-
#ifdef _KERNEL
/*
Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.368 src/sys/sys/param.h:1.369
--- src/sys/sys/param.h:1.368 Sat Jun 26 14:24:27 2010
+++ src/sys/sys/param.h Thu Jul 1 13:00:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.368 2010/06/26 14:24:27 kefren Exp $ */
+/* $NetBSD: param.h,v 1.369 2010/07/01 13:00:57 hannken Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
* 2.99.9 (299000900)
*/
-#define __NetBSD_Version__ 599003300 /* NetBSD 5.99.33 */
+#define __NetBSD_Version__ 599003400 /* NetBSD 5.99.34 */
#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.220 src/sys/sys/vnode.h:1.221
--- src/sys/sys/vnode.h:1.220 Fri Jun 18 16:29:02 2010
+++ src/sys/sys/vnode.h Thu Jul 1 13:00:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vnode.h,v 1.220 2010/06/18 16:29:02 hannken Exp $ */
+/* $NetBSD: vnode.h,v 1.221 2010/07/01 13:00:57 hannken Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -122,10 +122,6 @@
LIST_HEAD(buflists, buf);
TAILQ_HEAD(vnodelst, vnode);
-struct vnlock {
- krwlock_t vl_lock;
-};
-
/*
* Reading or writing any of these items requires holding the appropriate
* lock. Field markings and the corresponding locks:
@@ -137,7 +133,7 @@
* n namecache_lock
* s syncer_data_lock
* u locked by underlying filesystem
- * v v_lock
+ * v vnode lock
* x v_interlock + bufcache_lock to modify, either to inspect
*
* Each underlying filesystem allocates its own private area and hangs
@@ -174,7 +170,7 @@
} v_un;
enum vtype v_type; /* :: vnode type */
enum vtagtype v_tag; /* :: type of underlying data */
- struct vnlock v_lock; /* v: lock for this vnode */
+ 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 */
};
@@ -190,13 +186,7 @@
typedef struct vnode vnode_t;
/*
- * All vnode locking operations should use vp->v_lock.
- *
- * All filesystems must (pretend to) understand lockmanager flags.
- */
-
-/*
- * Vnode flags. The first set are locked by vp->v_lock or are stable.
+ * Vnode flags. The first set are locked by vnode lock or are stable.
* VSYSTEM is only used to skip vflush()ing quota files. VISTTY is used
* when reading dead vnodes.
*/
@@ -244,6 +234,15 @@
#define VC_MASK 0x7fffffff
/*
+ * vnode lock flags
+ */
+#define LK_SHARED 0x00000001 /* shared lock */
+#define LK_EXCLUSIVE 0x00000002 /* exclusive lock */
+#define LK_NOWAIT 0x00000010 /* do not sleep to await lock */
+#define LK_INTERLOCK 0x00010000 /* caller holds v_interlock */
+#define LK_RETRY 0x00020000 /* vn_lock: retry until locked */
+
+/*
* Vnode attributes. A field value of VNOVAL represents a field whose value
* is unavailable (getattr) or which is not to be changed (setattr).
*/
@@ -634,8 +633,6 @@
void vn_syncer_remove_from_worklist(struct vnode *);
int speedup_syncer(void);
int dorevoke(struct vnode *, kauth_cred_t);
-int vlockmgr(struct vnlock *, int);
-int vlockstatus(struct vnlock *);
int rawdev_mounted(struct vnode *, struct vnode **);
uint8_t vtype2dt(enum vtype);
Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.137 src/sys/ufs/lfs/lfs_syscalls.c:1.138
--- src/sys/ufs/lfs/lfs_syscalls.c:1.137 Thu Jun 24 13:03:19 2010
+++ src/sys/ufs/lfs/lfs_syscalls.c Thu Jul 1 13:00:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_syscalls.c,v 1.137 2010/06/24 13:03:19 hannken Exp $ */
+/* $NetBSD: lfs_syscalls.c,v 1.138 2010/07/01 13:00:57 hannken Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007, 2008
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.137 2010/06/24 13:03:19 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.138 2010/07/01 13:00:57 hannken Exp $");
#ifndef LFS
# define LFS /* for prototypes in syscallargs.h */
@@ -1140,7 +1140,7 @@
ufs_ihashrem(ip);
/* Unlock and discard unneeded inode. */
- vlockmgr(&vp->v_lock, LK_RELEASE);
+ VOP_UNLOCK(vp);
lfs_vunref(vp);
*vpp = NULL;
return (error);
@@ -1163,7 +1163,7 @@
ufs_ihashrem(ip);
/* Unlock and discard unneeded inode. */
- vlockmgr(&vp->v_lock, LK_RELEASE);
+ VOP_UNLOCK(vp);
lfs_vunref(vp);
brelse(bp, 0);
*vpp = NULL;
Index: src/sys/ufs/ufs/ufs_ihash.c
diff -u src/sys/ufs/ufs/ufs_ihash.c:1.28 src/sys/ufs/ufs/ufs_ihash.c:1.29
--- src/sys/ufs/ufs/ufs_ihash.c:1.28 Thu Nov 5 08:18:02 2009
+++ src/sys/ufs/ufs/ufs_ihash.c Thu Jul 1 13:00:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_ihash.c,v 1.28 2009/11/05 08:18:02 bouyer Exp $ */
+/* $NetBSD: ufs_ihash.c,v 1.29 2010/07/01 13:00:57 hannken Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_ihash.c,v 1.28 2009/11/05 08:18:02 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_ihash.c,v 1.29 2010/07/01 13:00:57 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -171,7 +171,7 @@
KASSERT(mutex_owned(&ufs_hashlock));
/* lock the inode, then put it on the appropriate hash list */
- vlockmgr(&ip->i_vnode->v_lock, LK_EXCLUSIVE);
+ VOP_LOCK(ITOV(ip), LK_EXCLUSIVE);
mutex_enter(&ufs_ihash_lock);
ipp = &ihashtbl[INOHASH(ip->i_dev, ip->i_number)];