From: Vlastimil Babka Date: Sat, 10 Sep 2016 10:34:06 +0000 (+1000) Subject: mm-compaction-require-only-min-watermarks-for-non-costly-orders-fix orders-fix X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=b5a7064c45a5c9703395cc6ac60dc29139326143;p=deliverable%2Flinux.git mm-compaction-require-only-min-watermarks-for-non-costly-orders-fix orders-fix Clarify why __isolate_free_page() does a order-0 watermark check with apparent (1UL << order) gap, per Joonsoo. Link: http://lkml.kernel.org/r/7ae4baec-4eca-e70b-2a69-94bea4fb19fa@suse.cz Signed-off-by: Vlastimil Babka Cc: Joonsoo Kim Cc: Michal Hocko Cc: Mel Gorman Cc: David Rientjes Cc: Rik van Riel Signed-off-by: Andrew Morton --- diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8df46ee472f9..6d3504749af4 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2489,7 +2489,12 @@ int __isolate_free_page(struct page *page, unsigned int order) mt = get_pageblock_migratetype(page); if (!is_migrate_isolate(mt)) { - /* Obey watermarks as if the page was being allocated */ + /* + * Obey watermarks as if the page was being allocated. We can + * emulate a high-order watermark check with a raised order-0 + * watermark, because we already know our high-order page + * exists. + */ watermark = min_wmark_pages(zone) + (1UL << order); if (!zone_watermark_ok(zone, 0, watermark, 0, ALLOC_CMA)) return 0;