Author: alc
Date: Sun Sep 23 17:42:39 2012
New Revision: 240862
URL: http://svn.freebsd.org/changeset/base/240862

Log:
  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

Modified:
  head/sys/vm/vm_pageout.c

Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c    Sun Sep 23 17:36:01 2012        (r240861)
+++ head/sys/vm/vm_pageout.c    Sun Sep 23 17:42:39 2012        (r240862)
@@ -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;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to