Private nodes do not support reclaim by default, so prevent all reclaimers from operating on private nodes.
shrink_node() is the common chokepoint for most reclaimers (direct, kswapd, proactive, mglru, etc), so it's the best place to filter. DAMON's proactive pageout bypasses shrink_node() entirely, so we disable DAMON in a separate commit as its own discrete service. Other reclaim entry points are already covered - e.g. MGLRU's debugfs interface rejects nids that are not N_MEMORY (N_MEMORY_PRIVATE is mutually exclusive), and madvise pageout/cold skips private nodes. Signed-off-by: Gregory Price <[email protected]> --- mm/vmscan.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/vmscan.c b/mm/vmscan.c index e26c6931f5fde..86b2334c23b98 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -6141,6 +6141,13 @@ static void shrink_node(pg_data_t *pgdat, struct scan_control *sc) struct lruvec *target_lruvec; bool reclaimable = false; + /* + * Private nodes do not support reclaim by default, filtering here + * captures all normal reclaim paths that may attempt eviction. + */ + if (node_is_private(pgdat->node_id)) + return; + if ((lru_gen_enabled() || lru_gen_switching()) && root_reclaim(sc)) { memset(&sc->nr, 0, sizeof(sc->nr)); lru_gen_shrink_node(pgdat, sc); -- 2.53.0-Meta

