]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Revert r289302, invalid pages can be queued, e.g. by vfs_vmio_unwire().
authorkib <kib@FreeBSD.org>
Thu, 15 Oct 2015 19:07:38 +0000 (19:07 +0000)
committerkib <kib@FreeBSD.org>
Thu, 15 Oct 2015 19:07:38 +0000 (19:07 +0000)
Found by: alc
Tested by: pho
Sponsored by: The FreeBSD Foundation

sys/vm/vm_pageout.c

index 5611ae66694a066cb7d61875b870233e7bf846a4..e0d00f5172f30516a4ed8d03efdbc2f22abb96f7 100644 (file)
@@ -1174,12 +1174,11 @@ unlock_page:
                queues_locked = FALSE;
 
                /*
-                * Invalid pages cannot appear on a queue.  If
-                * vm_pageout_fallback_object_lock() allowed a window
-                * where the page could be invalidated, it should
-                * detect this.
+                * Invalid pages can be easily freed. They cannot be
+                * mapped, vm_page_free() asserts this.
                 */
-               KASSERT(m->valid != 0, ("Invalid page %p on inact queue", m));
+               if (m->valid == 0)
+                       goto free_page;
 
                /*
                 * If the page has been referenced and the object is not dead,
@@ -1232,6 +1231,7 @@ unlock_page:
                        /*
                         * Clean pages can be freed.
                         */
+free_page:
                        vm_page_free(m);
                        PCPU_INC(cnt.v_dfree);
                        --page_shortage;