|
@@ -295,10 +295,25 @@ static unsigned long isolate_migratepages(struct zone *zone,
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ if (!PageLRU(page))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * PageLRU is set, and lru_lock excludes isolation,
|
|
|
+ * splitting and collapsing (collapsing has already
|
|
|
+ * happened if PageLRU is set).
|
|
|
+ */
|
|
|
+ if (PageTransHuge(page)) {
|
|
|
+ low_pfn += (1 << compound_order(page)) - 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
/* Try isolate the page */
|
|
|
if (__isolate_lru_page(page, ISOLATE_BOTH, 0) != 0)
|
|
|
continue;
|
|
|
|
|
|
+ VM_BUG_ON(PageTransCompound(page));
|
|
|
+
|
|
|
/* Successfully isolated */
|
|
|
del_page_from_lru_list(zone, page, page_lru(page));
|
|
|
list_add(&page->lru, migratelist);
|