[PATCH v5 17/36] mm/vmscan: disallow reclaim of private node memory
From: Gregory Price
Date: Mon Jul 20 2026 - 15:39:49 EST
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 <gourry@xxxxxxxxxx>
---
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