From f8224aa5a0a4627926019bba7511926393fbee3b Mon Sep 17 00:00:00 2001 From: Vlastimil Babka Date: Thu, 9 Oct 2014 15:27:07 -0700 Subject: mm, compaction: do not recheck suitable_migration_target under lock isolate_freepages_block() rechecks if the pageblock is suitable to be a target for migration after it has taken the zone->lock. However, the check has been optimized to occur only once per pageblock, and compact_checklock_irqsave() might be dropping and reacquiring lock, which means somebody else might have changed the pageblock's migratetype meanwhile. Furthermore, nothing prevents the migratetype to change right after isolate_freepages_block() has finished isolating. Given how imperfect this is, it's simpler to just rely on the check done in isolate_freepages() without lock, and not pretend that the recheck under lock guarantees anything. It is just a heuristic after all. Signed-off-by: Vlastimil Babka Reviewed-by: Zhang Yanfei Acked-by: Minchan Kim Acked-by: Mel Gorman Cc: Joonsoo Kim Cc: Michal Nazarewicz Cc: Naoya Horiguchi Cc: Christoph Lameter Cc: Rik van Riel Acked-by: David Rientjes Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- mm/compaction.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'mm/compaction.c') diff --git a/mm/compaction.c b/mm/compaction.c index 1c7195d42e83..7bf150d4e1c8 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -276,7 +276,6 @@ static unsigned long isolate_freepages_block(struct compact_control *cc, struct page *cursor, *valid_page = NULL; unsigned long flags; bool locked = false; - bool checked_pageblock = false; cursor = pfn_to_page(blockpfn); @@ -307,18 +306,6 @@ static unsigned long isolate_freepages_block(struct compact_control *cc, if (!locked) break; - /* Recheck this is a suitable migration target under lock */ - if (!strict && !checked_pageblock) { - /* - * We need to check suitability of pageblock only once - * and this isolate_freepages_block() is called with - * pageblock range, so just check once is sufficient. - */ - checked_pageblock = true; - if (!suitable_migration_target(page)) - break; - } - /* Recheck this is a buddy page under lock */ if (!PageBuddy(page)) goto isolate_fail; -- cgit v1.2.1