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;