From a0349df30f698fa26694aeca2cf25e3745801b81 Mon Sep 17 00:00:00 2001 From: alc Date: Sun, 23 Sep 2012 17:42:39 +0000 Subject: Address a race condition that was introduced in r238212. Unless the page queues lock is acquired before the page lock is released, there is no guarantee that the page will still be in that same page queue when vm_page_requeue() is called. Reported by: pho In collaboration with: kib MFC after: 3 days --- sys/vm/vm_pageout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index b606615..d533673 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -1125,9 +1125,9 @@ vm_pageout_scan(int pass) * Those objects are in a "rundown" state. */ if (!swap_pageouts_ok || (object->flags & OBJ_DEAD)) { + vm_page_lock_queues(); vm_page_unlock(m); VM_OBJECT_UNLOCK(object); - vm_page_lock_queues(); queues_locked = TRUE; vm_page_requeue(m); goto relock_queues; -- cgit v1.1