From 0ca2c9c3a96392bdd7ccbc45b52cbe06e986cc17 Mon Sep 17 00:00:00 2001 From: Andrea Arcangeli Date: Fri, 21 May 2010 01:14:04 +0200 Subject: transhuge isolate_migratepages() It's not worth migrating transparent hugepages during compaction. Those hugepages don't create fragmentation. Signed-off-by: Andrea Arcangeli --- mm/compaction.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mm/compaction.c b/mm/compaction.c index 94cce51b0b35..c5c99e0422f5 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -271,10 +271,25 @@ static unsigned long isolate_migratepages(struct zone *zone, if (PageBuddy(page)) 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); -- cgit v1.2.3