X-Git-Url: http://git.cascardo.info/?a=blobdiff_plain;f=mm%2Fpage_alloc.c;h=c988d324e3f63f25aca5db4a735a2f7d137ec2de;hb=8348faf91f56371d4bada6fc5915e19580a15ffe;hp=a2214c64ed3cd04dceaed7a579f593852e458df1;hpb=3b495e4bf34b5e4ad2658e08694493e6068e2e5d;p=cascardo%2Flinux.git diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a2214c64ed3c..c988d324e3f6 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2489,9 +2489,14 @@ 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 */ - watermark = low_wmark_pages(zone) + (1 << order); - if (!zone_watermark_ok(zone, 0, watermark, 0, 0)) + /* + * 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; __mod_zone_freepage_state(zone, -(1UL << order), mt);