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(&amp->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)];

Reply via email to