}
/*
- * Hugetlbfs pages should consistenly be skipped until updated by the hugetlb
- * subsystem. It is always pointless to compact pages of pageblock_order and
- * the free scanner can reconsider when no longer huge.
+ * Compound pages of >= pageblock_order should consistenly be skipped until
+ * released. It is always pointless to compact pages of such order (if they are
+ * migratable), and the pageblocks they occupy cannot contain any free pages.
*/
-static bool pageblock_skip_persistent(struct page *page, unsigned int order)
+static bool pageblock_skip_persistent(struct page *page)
{
- if (!PageHuge(page))
+ if (!PageCompound(page))
return false;
- if (order != pageblock_order)
- return false;
- return true;
+
+ page = compound_head(page);
+
+ if (compound_order(page) >= pageblock_order)
+ return true;
+
+ return false;
}
/*
continue;
if (zone != page_zone(page))
continue;
- if (pageblock_skip_persistent(page, compound_order(page)))
+ if (pageblock_skip_persistent(page))
continue;
clear_pageblock_skip(page);
return true;
}
-static inline bool pageblock_skip_persistent(struct page *page,
- unsigned int order)
+static inline bool pageblock_skip_persistent(struct page *page)
{
return false;
}