Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Apr 2011 12:07:07 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r221061 - stable/8/sys/vm
Message-ID:  <201104261207.p3QC77tG021725@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Apr 26 12:07:07 2011
New Revision: 221061
URL: http://svn.freebsd.org/changeset/base/221061

Log:
  MFC r220977:
  Fix two bugs in r218670.
  
  Hold the vnode around the region where object lock is dropped, until
  vnode lock is acquired.
  
  Do not drop the vnode reference for a case when the object was
  deallocated during unlock. Note that in this case, VV_TEXT is cleared
  by vnode_pager_dealloc().

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	Tue Apr 26 11:43:57 2011	(r221060)
+++ stable/8/sys/vm/vm_object.c	Tue Apr 26 12:07:07 2011	(r221061)
@@ -447,14 +447,21 @@ vm_object_vndeallocate(vm_object_t objec
 		/* vrele may need the vnode lock. */
 		vrele(vp);
 	} else {
+		vhold(vp);
 		VM_OBJECT_UNLOCK(object);
 		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+		vdrop(vp);
 		VM_OBJECT_LOCK(object);
 		object->ref_count--;
-		if (object->ref_count == 0)
-			vp->v_vflag &= ~VV_TEXT;
-		VM_OBJECT_UNLOCK(object);
-		vput(vp);
+		if (object->type == OBJT_DEAD) {
+			VM_OBJECT_UNLOCK(object);
+			VOP_UNLOCK(vp, 0);
+		} else {
+			if (object->ref_count == 0)
+				vp->v_vflag &= ~VV_TEXT;
+			VM_OBJECT_UNLOCK(object);
+			vput(vp);
+		}
 	}
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104261207.p3QC77tG021725>