svn commit: r218880 - stable/8/sys/vm

Konstantin Belousov kib at FreeBSD.org
Sun Feb 20 09:18:00 UTC 2011


Author: kib
Date: Sun Feb 20 09:17:59 2011
New Revision: 218880
URL: http://svn.freebsd.org/changeset/base/218880

Log:
  MFC r218670:
  Lock the vnode around clearing of VV_TEXT flag. Remove mp_fixme() note
  mentioning that vnode lock is needed.

Modified:
  stable/8/sys/vm/vm_object.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/vm/vm_object.c
==============================================================================
--- stable/8/sys/vm/vm_object.c	Sun Feb 20 07:58:30 2011	(r218879)
+++ stable/8/sys/vm/vm_object.c	Sun Feb 20 09:17:59 2011	(r218880)
@@ -441,16 +441,21 @@ vm_object_vndeallocate(vm_object_t objec
 	}
 #endif
 
-	object->ref_count--;
-	if (object->ref_count == 0) {
-		mp_fixme("Unlocked vflag access.");
-		vp->v_vflag &= ~VV_TEXT;
+	if (object->ref_count > 1) {
+		object->ref_count--;
+		VM_OBJECT_UNLOCK(object);
+		/* vrele may need the vnode lock. */
+		vrele(vp);
+	} else {
+		VM_OBJECT_UNLOCK(object);
+		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+		VM_OBJECT_LOCK(object);
+		object->ref_count--;
+		if (object->ref_count == 0)
+			vp->v_vflag &= ~VV_TEXT;
+		VM_OBJECT_UNLOCK(object);
+		vput(vp);
 	}
-	VM_OBJECT_UNLOCK(object);
-	/*
-	 * vrele may need a vop lock
-	 */
-	vrele(vp);
 }
 
 /*


More information about the svn-src-stable-8 mailing list