svn commit: r195038 - user/kmacy/releng_7_2_fcs/sys/vm
Kip Macy
kmacy at FreeBSD.org
Fri Jun 26 05:41:03 UTC 2009
Author: kmacy
Date: Fri Jun 26 05:41:02 2009
New Revision: 195038
URL: http://svn.freebsd.org/changeset/base/195038
Log:
fix lock ordering and avoid duplicate acquisition of page queue lock
Modified:
user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c
Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c Fri Jun 26 05:29:40 2009 (r195037)
+++ user/kmacy/releng_7_2_fcs/sys/vm/vm_pageout.c Fri Jun 26 05:41:02 2009 (r195038)
@@ -743,19 +743,18 @@ vm_pageout_scan(int pass)
maxlaunder = 1;
if (pass)
maxlaunder = 10000;
+ vm_page_lock_queues();
rescan0:
addl_page_shortage = addl_page_shortage_init;
maxscan = cnt.v_inactive_count;
- vm_page_lock_queues();
for (m = TAILQ_FIRST(&vm_page_queues[PQ_INACTIVE].pl);
m != NULL && maxscan-- > 0 && page_shortage > 0;
m = next) {
cnt.v_pdpages++;
- if (VM_PAGE_GETQUEUE(m) != PQ_INACTIVE) {
+ if (VM_PAGE_GETQUEUE(m) != PQ_INACTIVE)
goto rescan0;
- }
next = TAILQ_NEXT(m, pageq);
object = m->object;
@@ -987,8 +986,8 @@ rescan0:
goto unlock_and_continue;
}
VM_OBJECT_LOCK(object);
- vm_page_lock_queues();
vm_page_lock(m);
+ vm_page_lock_queues();
/*
* The page might have been moved to another
* queue during potential blocking in vget()
More information about the svn-src-user
mailing list