Skip compaction on private nodes. Compaction requires the ability to migrate pages, which is not yet supported on private nodes.
Signed-off-by: Gregory Price <[email protected]> --- mm/compaction.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mm/compaction.c b/mm/compaction.c index 9f81055a358ed..8c1351cce7bcc 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -2462,6 +2462,9 @@ bool compaction_zonelist_suitable(struct alloc_context *ac, int order, !__cpuset_zone_allowed(zone, gfp_mask)) continue; + if (node_is_private(zone_to_nid(zone))) + continue; + /* * Do not consider all the reclaimable memory because we do not * want to trash just for a single high order allocation which @@ -2853,6 +2856,9 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order, !__cpuset_zone_allowed(zone, gfp_mask)) continue; + if (node_is_private(zone_to_nid(zone))) + continue; + if (prio > MIN_COMPACT_PRIORITY && compaction_deferred(zone, order)) { rc = max_t(enum compact_result, COMPACT_DEFERRED, rc); @@ -2922,6 +2928,9 @@ static int compact_node(pg_data_t *pgdat, bool proactive) .proactive_compaction = proactive, }; + if (node_is_private(pgdat->node_id)) + return 0; + for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) { zone = &pgdat->node_zones[zoneid]; if (!populated_zone(zone)) @@ -3017,6 +3026,9 @@ static ssize_t compact_store(struct device *dev, { int nid = dev->id; + if (node_is_private(nid)) + return -EINVAL; + if (nid >= 0 && nid < nr_node_ids && node_online(nid)) { /* Flush pending updates to the LRU lists */ lru_add_drain_all(); -- 2.53.0-Meta

