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;

Reply via email to