Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 May 2009 08:39:45 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r192801 - user/kmacy/releng_7_2_fcs/sys/vm
Message-ID:  <200905260839.n4Q8djUZ051665@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Tue May 26 08:39:44 2009
New Revision: 192801
URL: http://svn.freebsd.org/changeset/base/192801

Log:
  simplify vm_pageout_clean by having it always drop the vm page lock
  - add asserts to help track down a missing unlock

Modified:
  user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c
  user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c

Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c	Tue May 26 08:21:59 2009	(r192800)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_page.c	Tue May 26 08:39:44 2009	(r192801)
@@ -1284,6 +1284,7 @@ vm_pageq_remove_locked(vm_page_t m)
 void
 vm_pageq_remove(vm_page_t m)
 {
+	mtx_assert(&vm_page_queue_mtx, MA_NOTOWNED);
 	vm_page_lock_queues();
 	vm_pageq_remove_locked(m);
 	vm_page_unlock_queues();

Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c	Tue May 26 08:21:59 2009	(r192800)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c	Tue May 26 08:39:44 2009	(r192801)
@@ -303,6 +303,7 @@ vm_pageout_clean(m)
 	 */
 	if ((m->hold_count != 0) ||
 	    ((m->busy != 0) || (m->oflags & VPO_BUSY))) {
+		vm_page_unlock(m);
 		return 0;
 	}
 	vm_page_io_start(m);
@@ -784,6 +785,7 @@ rescan0:
 			addl_page_shortage++;
 			continue;
 		}
+
 		if (vm_page_trylock(m) == 0) {
 			VM_OBJECT_UNLOCK(object);
 			addl_page_shortage++;
@@ -1040,8 +1042,7 @@ rescan0:
 			if (vm_pageout_clean(m) != 0) {
 				--page_shortage;
 				--maxlaunder;
-			} else
-				vm_page_unlock(m);
+			} 
 			vm_page_lock_queues();
 unlock_and_continue:
 			VM_OBJECT_UNLOCK(object);
@@ -1338,6 +1339,7 @@ vm_pageout_page_stats()
 			m = next;
 			continue;
 		}
+		vm_page_lock_assert(m, MA_NOTOWNED);
 		if (vm_page_trylock(m) == 0) {
 			VM_OBJECT_UNLOCK(object);
 			m = next;



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