|
|
@@ -1399,10 +1399,14 @@ static enum compact_result __compaction_suitable(struct zone *zone, int order,
|
|
|
* 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.
|
|
|
+ * For costly orders, we require low watermark instead of min for
|
|
|
+ * compaction to proceed to increase its chances.
|
|
|
* ALLOC_CMA is used, as pages in CMA pageblocks are considered
|
|
|
* suitable migration targets
|
|
|
*/
|
|
|
- watermark = low_wmark_pages(zone) + compact_gap(order);
|
|
|
+ watermark = (order > PAGE_ALLOC_COSTLY_ORDER) ?
|
|
|
+ low_wmark_pages(zone) : min_wmark_pages(zone);
|
|
|
+ watermark += compact_gap(order);
|
|
|
if (!__zone_watermark_ok(zone, 0, watermark, classzone_idx,
|
|
|
ALLOC_CMA, wmark_target))
|
|
|
return COMPACT_SKIPPED;
|