Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Apr 2010 19:40:37 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r207448 - head/sys/vm
Message-ID:  <201004301940.o3UJebXR061238@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Fri Apr 30 19:40:37 2010
New Revision: 207448
URL: http://svn.freebsd.org/changeset/base/207448

Log:
  - don't check hold_count without the page lock held
  - don't leak the page lock if m->object is NULL
    (assuming that that check will in fact even be valid when m->object is protected by the page lock)

Modified:
  head/sys/vm/vm_pageout.c

Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c	Fri Apr 30 19:05:01 2010	(r207447)
+++ head/sys/vm/vm_pageout.c	Fri Apr 30 19:40:37 2010	(r207448)
@@ -775,16 +775,17 @@ rescan0:
 		if (m->flags & PG_MARKER)
 			continue;
 
-		/*
-		 * A held page may be undergoing I/O, so skip it.
-		 */
-		if (m->hold_count) {
-			vm_page_requeue(m);
+		if (!vm_page_trylock(m)) {
 			addl_page_shortage++;
 			continue;
 		}
 
-		if (!vm_page_trylock(m) || (object = m->object) == NULL) {
+		/*
+		 * A held page may be undergoing I/O, so skip it.
+		 */
+		if (m->hold_count || (object = m->object) == NULL) {
+			vm_page_unlock(m);
+			vm_page_requeue(m);
 			addl_page_shortage++;
 			continue;
 		}



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