Module Name: src Committed By: hannken Date: Fri Jun 18 16:29:02 UTC 2010
Modified Files: src/distrib/sets/lists/comp: mi src/doc: CHANGES src/share/man/man9: Makefile vnsubr.9 src/sys/fs/unionfs: unionfs_subr.c src/sys/kern: vfs_subr.c vfs_vnops.c src/sys/sys: lock.h param.h vnode.h Log Message: Remove the concept of recursive vnode locks by eliminating vn_setrecurse(), vn_restorerecurse() and LK_CANRECURSE. Welcome to 5.99.31 Discussed on tech-kern. To generate a diff of this commit: cvs rdiff -u -r1.1467 -r1.1468 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.1404 -r1.1405 src/doc/CHANGES cvs rdiff -u -r1.332 -r1.333 src/share/man/man9/Makefile cvs rdiff -u -r1.38 -r1.39 src/share/man/man9/vnsubr.9 cvs rdiff -u -r1.6 -r1.7 src/sys/fs/unionfs/unionfs_subr.c cvs rdiff -u -r1.404 -r1.405 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.172 -r1.173 src/sys/kern/vfs_vnops.c cvs rdiff -u -r1.83 -r1.84 src/sys/sys/lock.h cvs rdiff -u -r1.365 -r1.366 src/sys/sys/param.h cvs rdiff -u -r1.219 -r1.220 src/sys/sys/vnode.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.1467 src/distrib/sets/lists/comp/mi:1.1468 --- src/distrib/sets/lists/comp/mi:1.1467 Fri Jun 18 04:21:22 2010 +++ src/distrib/sets/lists/comp/mi Fri Jun 18 16:29:01 2010 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1467 2010/06/18 04:21:22 mrg Exp $ +# $NetBSD: mi,v 1.1468 2010/06/18 16:29:01 hannken Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -9880,8 +9880,8 @@ ./usr/share/man/cat9/vn_poll.0 comp-sys-catman .cat ./usr/share/man/cat9/vn_rdwr.0 comp-sys-catman .cat ./usr/share/man/cat9/vn_read.0 comp-sys-catman .cat -./usr/share/man/cat9/vn_restorerecurse.0 comp-sys-catman .cat -./usr/share/man/cat9/vn_setrecurse.0 comp-sys-catman .cat +./usr/share/man/cat9/vn_restorerecurse.0 comp-sys-catman obsolete +./usr/share/man/cat9/vn_setrecurse.0 comp-sys-catman obsolete ./usr/share/man/cat9/vn_start_write.0 comp-obsolete obsolete ./usr/share/man/cat9/vn_stat.0 comp-sys-catman .cat ./usr/share/man/cat9/vn_statfile.0 comp-sys-catman .cat @@ -15582,8 +15582,8 @@ ./usr/share/man/html9/vn_poll.html comp-sys-htmlman html ./usr/share/man/html9/vn_rdwr.html comp-sys-htmlman html ./usr/share/man/html9/vn_read.html comp-sys-htmlman html -./usr/share/man/html9/vn_restorerecurse.html comp-sys-htmlman html -./usr/share/man/html9/vn_setrecurse.html comp-sys-htmlman html +./usr/share/man/html9/vn_restorerecurse.html comp-sys-htmlman obsolete +./usr/share/man/html9/vn_setrecurse.html comp-sys-htmlman obsolete ./usr/share/man/html9/vn_stat.html comp-sys-htmlman html ./usr/share/man/html9/vn_statfile.html comp-sys-htmlman html ./usr/share/man/html9/vn_write.html comp-sys-htmlman html @@ -21537,8 +21537,8 @@ ./usr/share/man/man9/vn_poll.9 comp-sys-man .man ./usr/share/man/man9/vn_rdwr.9 comp-sys-man .man ./usr/share/man/man9/vn_read.9 comp-sys-man .man -./usr/share/man/man9/vn_restorerecurse.9 comp-sys-man .man -./usr/share/man/man9/vn_setrecurse.9 comp-sys-man .man +./usr/share/man/man9/vn_restorerecurse.9 comp-sys-man obsolete +./usr/share/man/man9/vn_setrecurse.9 comp-sys-man obsolete ./usr/share/man/man9/vn_start_write.9 comp-obsolete obsolete ./usr/share/man/man9/vn_stat.9 comp-sys-man .man ./usr/share/man/man9/vn_statfile.9 comp-sys-man .man Index: src/doc/CHANGES diff -u src/doc/CHANGES:1.1404 src/doc/CHANGES:1.1405 --- src/doc/CHANGES:1.1404 Thu Jun 17 23:58:14 2010 +++ src/doc/CHANGES Fri Jun 18 16:29:01 2010 @@ -1,4 +1,4 @@ -# LIST OF CHANGES FROM LAST RELEASE: <$Revision: 1.1404 $> +# LIST OF CHANGES FROM LAST RELEASE: <$Revision: 1.1405 $> # # # [Note: This file does not mention every change made to the NetBSD source tree. @@ -633,3 +633,4 @@ ofppc: Support Gigabit Ethernet Controller for MV64361 on PegasosII by mv...@gt. [kiyohara 20100609] arm: Added support for Cortex-A8 CPUs. [jmcneill 20100616] + vnsubr(9): Remove recursive vnode locks. [hannken 20100618] Index: src/share/man/man9/Makefile diff -u src/share/man/man9/Makefile:1.332 src/share/man/man9/Makefile:1.333 --- src/share/man/man9/Makefile:1.332 Tue Jun 8 05:40:27 2010 +++ src/share/man/man9/Makefile Fri Jun 18 16:29:01 2010 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.332 2010/06/08 05:40:27 jruoho Exp $ +# $NetBSD: Makefile,v 1.333 2010/06/18 16:29:01 hannken Exp $ # Makefile for section 9 (kernel function and variable) manual pages. @@ -868,9 +868,7 @@ vnsubr.9 vn_lock.9 \ vnsubr.9 vn_markexec.9 \ vnsubr.9 vn_marktext.9 \ - vnsubr.9 vn_restorerecurse.9 \ vnsubr.9 vn_rdwr.9 \ - vnsubr.9 vn_setrecurse.9 \ vnsubr.9 vn_stat.9 \ vnsubr.9 vn_open.9 \ vnsubr.9 vn_writechk.9 Index: src/share/man/man9/vnsubr.9 diff -u src/share/man/man9/vnsubr.9:1.38 src/share/man/man9/vnsubr.9:1.39 --- src/share/man/man9/vnsubr.9:1.38 Tue Jun 2 18:09:34 2009 +++ src/share/man/man9/vnsubr.9 Fri Jun 18 16:29:01 2010 @@ -1,4 +1,4 @@ -.\" $NetBSD: vnsubr.9,v 1.38 2009/06/02 18:09:34 jnemeth Exp $ +.\" $NetBSD: vnsubr.9,v 1.39 2010/06/18 16:29:01 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 June 2, 2009 +.Dd June 18, 2010 .Dt VNSUBR 9 .Os .Sh NAME @@ -40,8 +40,6 @@ .Nm vn_markexec , .Nm vn_marktext , .Nm vn_rdwr , -.Nm vn_restorerecurse , -.Nm vn_setrecurse , .Nm vn_open , .Nm vn_stat , .Nm vn_writechk @@ -64,10 +62,6 @@ .Fn vn_markexec "struct vnode *vp" .Ft void .Fn vn_marktext "struct vnode *vp" -.Ft u_int -.Fn vn_setrecurse "struct vnode *vp" -.Ft void -.Fn vn_restorerecurse "struct vnode *vp" "u_int flags" .Ft int .Fn vn_open "struct nameidata *ndp" "int fmode" "int cmode" .Ft int @@ -155,20 +149,6 @@ Common code to mark the vnode .Fa vp as being the text of a running process. -.It Fn vn_setrecurse "vp" -Common code to enable -.Dv LK_CANRECURSE -on the vnode lock for vnode -.Fa vp . -.Fn vn_setrecurse -returns the new -.Xr lockmgr 9 -flags after the update. -.It Fn vn_restorerecurse "vp" "flags" -Common code to restore the vnode lock flags for the vnode -.Fa vp . -It is called when done with -.Fn vn_setrecurse . .It Fn vn_open "ndp" "fmode" "cmode" Common code for vnode open operations. The pathname is described in the nameidata pointer (see Index: src/sys/fs/unionfs/unionfs_subr.c diff -u src/sys/fs/unionfs/unionfs_subr.c:1.6 src/sys/fs/unionfs/unionfs_subr.c:1.7 --- src/sys/fs/unionfs/unionfs_subr.c:1.6 Sun Jun 6 08:01:31 2010 +++ src/sys/fs/unionfs/unionfs_subr.c Fri Jun 18 16:29:01 2010 @@ -473,7 +473,6 @@ static void unionfs_node_update(struct unionfs_node *unp, struct vnode *uvp) { - int count, lockcnt; struct vnode *vp; struct vnode *lvp; @@ -485,13 +484,8 @@ */ mutex_enter(&vp->v_interlock); unp->un_uppervp = uvp; - lockcnt = lvp->v_lock.vl_recursecnt + - rw_write_held(&lvp->v_lock.vl_lock); - if (lockcnt <= 0) - panic("unionfs: no exclusive lock"); + KASSERT(rw_write_held(&lvp->v_lock.vl_lock)); mutex_exit(&vp->v_interlock); - for (count = 1; count < lockcnt; count++) - vn_lock(uvp, LK_EXCLUSIVE | LK_CANRECURSE | LK_RETRY); } /* Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.404 src/sys/kern/vfs_subr.c:1.405 --- src/sys/kern/vfs_subr.c:1.404 Sun Jun 6 08:01:31 2010 +++ src/sys/kern/vfs_subr.c Fri Jun 18 16:29:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.404 2010/06/06 08:01:31 hannken Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.405 2010/06/18 16:29:02 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.404 2010/06/06 08:01:31 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.405 2010/06/18 16:29:02 hannken Exp $"); #include "opt_ddb.h" #include "opt_compat_netbsd.h" @@ -2738,11 +2738,11 @@ printf("%s: ", label); printf("vnode @ %p, flags (%s)\n\ttag %s(%d), type %s(%d), " "usecount %d, writecount %d, holdcount %d\n" - "\tfreelisthd %p, mount %p, data %p lock %p recursecnt %d\n", + "\tfreelisthd %p, mount %p, data %p lock %p\n", 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, vl->vl_recursecnt); + vp->v_freelisthd, vp->v_mount, vp->v_data, vl); if (vp->v_data != NULL) { printf("\t"); VOP_PRINT(vp); @@ -2928,40 +2928,24 @@ vlockmgr(struct vnlock *vl, int flags) { - KASSERT((flags & ~(LK_CANRECURSE | LK_NOWAIT | LK_TYPE_MASK)) == 0); + KASSERT((flags & ~(LK_NOWAIT | LK_TYPE_MASK)) == 0); - switch (flags & LK_TYPE_MASK) { + switch (flags & (LK_NOWAIT | LK_TYPE_MASK)) { case LK_SHARED: - if (rw_tryenter(&vl->vl_lock, RW_READER)) { - return 0; - } - if ((flags & LK_NOWAIT) != 0) { - return EBUSY; - } 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: - if (rw_tryenter(&vl->vl_lock, RW_WRITER)) { - return 0; - } - if ((vl->vl_canrecurse || (flags & LK_CANRECURSE) != 0) && - rw_write_held(&vl->vl_lock)) { - vl->vl_recursecnt++; - return 0; - } - if ((flags & LK_NOWAIT) != 0) { - return EBUSY; - } 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: - if (vl->vl_recursecnt != 0) { - KASSERT(rw_write_held(&vl->vl_lock)); - vl->vl_recursecnt--; - return 0; - } rw_exit(&vl->vl_lock); return 0; Index: src/sys/kern/vfs_vnops.c diff -u src/sys/kern/vfs_vnops.c:1.172 src/sys/kern/vfs_vnops.c:1.173 --- src/sys/kern/vfs_vnops.c:1.172 Sun Jun 6 08:01:31 2010 +++ src/sys/kern/vfs_vnops.c Fri Jun 18 16:29:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnops.c,v 1.172 2010/06/06 08:01:31 hannken Exp $ */ +/* $NetBSD: vfs_vnops.c,v 1.173 2010/06/18 16:29:02 hannken Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.172 2010/06/06 08:01:31 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnops.c,v 1.173 2010/06/18 16:29:02 hannken Exp $"); #include "veriexec.h" @@ -772,8 +772,7 @@ || (vp->v_iflag & VI_ONWORKLST) != 0); #endif KASSERT((flags & - ~(LK_INTERLOCK|LK_SHARED|LK_EXCLUSIVE|LK_NOWAIT|LK_RETRY| - LK_CANRECURSE)) + ~(LK_INTERLOCK|LK_SHARED|LK_EXCLUSIVE|LK_NOWAIT|LK_RETRY)) == 0); #ifdef DIAGNOSTIC @@ -822,28 +821,6 @@ } /* - * Enable LK_CANRECURSE on lock. Return prior status. - */ -u_int -vn_setrecurse(struct vnode *vp) -{ - - atomic_inc_uint(&vp->v_lock.vl_canrecurse); - - return 0; -} - -/* - * Called when done with locksetrecurse. - */ -void -vn_restorerecurse(struct vnode *vp, u_int flags) -{ - - atomic_dec_uint(&vp->v_lock.vl_canrecurse); -} - -/* * Simplified in-kernel wrapper calls for extended attribute access. * Both calls pass in a NULL credential, authorizing a "kernel" access. * Set IO_NODELOCKED in ioflg if the vnode is already locked. Index: src/sys/sys/lock.h diff -u src/sys/sys/lock.h:1.83 src/sys/sys/lock.h:1.84 --- src/sys/sys/lock.h:1.83 Mon Apr 28 20:24:10 2008 +++ src/sys/sys/lock.h Fri Jun 18 16:29:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: lock.h,v 1.83 2008/04/28 20:24:10 martin Exp $ */ +/* $NetBSD: lock.h,v 1.84 2010/06/18 16:29:02 hannken Exp $ */ /*- * Copyright (c) 1999, 2000, 2006, 2007 The NetBSD Foundation, Inc. @@ -80,7 +80,6 @@ #define LK_EXCLOTHER 0x00000008 /* other process holds lock */ #define LK_NOWAIT 0x00000010 /* do not sleep to await lock */ -#define LK_CANRECURSE 0x00000040 /* this may be recursive lock attempt */ #define LK_INTERLOCK 0x00010000 /* unlock passed simple lock after getting lk_interlock */ #define LK_RETRY 0x00020000 /* vn_lock: retry until locked */ Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.365 src/sys/sys/param.h:1.366 --- src/sys/sys/param.h:1.365 Sun Jun 6 08:01:32 2010 +++ src/sys/sys/param.h Fri Jun 18 16:29:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.365 2010/06/06 08:01:32 hannken Exp $ */ +/* $NetBSD: param.h,v 1.366 2010/06/18 16:29:02 hannken Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -63,7 +63,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 599003000 /* NetBSD 5.99.30 */ +#define __NetBSD_Version__ 599003100 /* NetBSD 5.99.31 */ #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.219 src/sys/sys/vnode.h:1.220 --- src/sys/sys/vnode.h:1.219 Sun Jun 6 08:01:32 2010 +++ src/sys/sys/vnode.h Fri Jun 18 16:29:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: vnode.h,v 1.219 2010/06/06 08:01:32 hannken Exp $ */ +/* $NetBSD: vnode.h,v 1.220 2010/06/18 16:29:02 hannken Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -124,8 +124,6 @@ struct vnlock { krwlock_t vl_lock; - u_int vl_canrecurse; - u_int vl_recursecnt; }; /* @@ -616,8 +614,6 @@ int, kauth_cred_t, size_t *, struct lwp *); int vn_readdir(struct file *, char *, int, u_int, int *, struct lwp *, off_t **, int *); -void vn_restorerecurse(struct vnode *, u_int); -u_int vn_setrecurse(struct vnode *); int vn_stat(struct vnode *, struct stat *); int vn_kqfilter(struct file *, struct knote *); int vn_writechk(struct vnode *);