[PATCH v5 17/36] mm/vmscan: disallow reclaim of private node memory
Gregory Price <[email protected]> Mon, 20 Jul 2026 15:34:11 -0400
| Newsgroups | org.kernel.vger.linux-debuggers,dev.linux.lists.damon,dev.linux.lists.driver-core,dev.linux.lists.nvdimm,org.kernel.vger.cgroups,org.kernel.vger.kvm,org.kernel.vger.linux-cxl,org.kernel.vger.linux-doc,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
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