svn commit: r192801 - user/kmacy/releng_7_2_fcs/sys/vm

Kip Macy kmacy at FreeBSD.org
Tue May 26 08:39:45 UTC 2009


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;


More information about the svn-src-user mailing list