Module Name: src Committed By: rmind Date: Sun May 22 04:29:04 UTC 2011
Modified Files: src/sys/fs/tmpfs [rmind-uvmplock]: tmpfs_subr.c src/sys/kern [rmind-uvmplock]: vfs_vnode.c Log Message: Fix vnode interlock sharing. To generate a diff of this commit: cvs rdiff -u -r1.56.4.5 -r1.56.4.6 src/sys/fs/tmpfs/tmpfs_subr.c cvs rdiff -u -r1.5.2.3 -r1.5.2.4 src/sys/kern/vfs_vnode.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/fs/tmpfs/tmpfs_subr.c diff -u src/sys/fs/tmpfs/tmpfs_subr.c:1.56.4.5 src/sys/fs/tmpfs/tmpfs_subr.c:1.56.4.6 --- src/sys/fs/tmpfs/tmpfs_subr.c:1.56.4.5 Thu May 19 03:43:02 2011 +++ src/sys/fs/tmpfs/tmpfs_subr.c Sun May 22 04:29:04 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: tmpfs_subr.c,v 1.56.4.5 2011/05/19 03:43:02 rmind Exp $ */ +/* $NetBSD: tmpfs_subr.c,v 1.56.4.6 2011/05/22 04:29:04 rmind Exp $ */ /* * Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tmpfs_subr.c,v 1.56.4.5 2011/05/19 03:43:02 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tmpfs_subr.c,v 1.56.4.6 2011/05/22 04:29:04 rmind Exp $"); #include <sys/param.h> #include <sys/dirent.h> @@ -373,6 +373,7 @@ /* Set UVM object to use vnode_t::v_interlock (share it). */ uvm_obj_setlock(node->tn_spec.tn_reg.tn_aobj, vp->v_interlock); + mutex_obj_hold(vp->v_interlock); error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); if (error != 0) { Index: src/sys/kern/vfs_vnode.c diff -u src/sys/kern/vfs_vnode.c:1.5.2.3 src/sys/kern/vfs_vnode.c:1.5.2.4 --- src/sys/kern/vfs_vnode.c:1.5.2.3 Thu May 19 03:43:03 2011 +++ src/sys/kern/vfs_vnode.c Sun May 22 04:29:04 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_vnode.c,v 1.5.2.3 2011/05/19 03:43:03 rmind Exp $ */ +/* $NetBSD: vfs_vnode.c,v 1.5.2.4 2011/05/22 04:29:04 rmind Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.5.2.3 2011/05/19 03:43:03 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.5.2.4 2011/05/22 04:29:04 rmind Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -424,6 +424,7 @@ if (svp) { /* Set the interlock and mark that it is shared. */ KASSERT(vp->v_mount == NULL); + mutex_obj_hold(svp->v_interlock); uvm_obj_setlock(&vp->v_uobj, svp->v_interlock); KASSERT(vp->v_interlock == svp->v_interlock); vp->v_iflag |= VI_LOCKSHARE;