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


Reply via email to