|
@@ -1392,11 +1392,19 @@ static enum compact_result __compaction_suitable(struct zone *zone, int order,
|
|
|
|
|
|
/*
|
|
|
* Watermarks for order-0 must be met for compaction to be able to
|
|
|
- * isolate free pages for migration targets.
|
|
|
+ * isolate free pages for migration targets. This means that the
|
|
|
+ * watermark and alloc_flags have to match, or be more pessimistic than
|
|
|
+ * the check in __isolate_free_page(). We don't use the direct
|
|
|
+ * compactor's alloc_flags, as they are not relevant for freepage
|
|
|
+ * isolation. We however do use the direct compactor's classzone_idx to
|
|
|
+ * skip over zones where lowmem reserves would prevent allocation even
|
|
|
+ * if compaction succeeds.
|
|
|
+ * ALLOC_CMA is used, as pages in CMA pageblocks are considered
|
|
|
+ * suitable migration targets
|
|
|
*/
|
|
|
watermark = low_wmark_pages(zone) + compact_gap(order);
|
|
|
if (!__zone_watermark_ok(zone, 0, watermark, classzone_idx,
|
|
|
- alloc_flags, wmark_target))
|
|
|
+ ALLOC_CMA, wmark_target))
|
|
|
return COMPACT_SKIPPED;
|
|
|
|
|
|
/*
|