Author: kmacy
Date: Fri Apr 30 19:40:37 2010
New Revision: 207448
URL: http://svn.freebsd.org/changeset/base/207448

Log:
  - don't check hold_count without the page lock held
  - don't leak the page lock if m->object is NULL
    (assuming that that check will in fact even be valid when m->object is 
protected by the page lock)

Modified:
  head/sys/vm/vm_pageout.c

Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c    Fri Apr 30 19:05:01 2010        (r207447)
+++ head/sys/vm/vm_pageout.c    Fri Apr 30 19:40:37 2010        (r207448)
@@ -775,16 +775,17 @@ rescan0:
                if (m->flags & PG_MARKER)
                        continue;
 
-               /*
-                * A held page may be undergoing I/O, so skip it.
-                */
-               if (m->hold_count) {
-                       vm_page_requeue(m);
+               if (!vm_page_trylock(m)) {
                        addl_page_shortage++;
                        continue;
                }
 
-               if (!vm_page_trylock(m) || (object = m->object) == NULL) {
+               /*
+                * A held page may be undergoing I/O, so skip it.
+                */
+               if (m->hold_count || (object = m->object) == NULL) {
+                       vm_page_unlock(m);
+                       vm_page_requeue(m);
                        addl_page_shortage++;
                        continue;
                }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to