Re: [PATCH -v4 0/2] mm: vmscan: fix node reclaim ignoring swappiness parameter
Andrew Morton <[email protected]> Thu, 23 Jul 2026 17:34:18 -0700
| Newsgroups | org.kernel.vger.cgroups,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 23 Jul 2026 11:24:32 +0800 Ridong <[email protected]> wrote: > From: Ridong Chen <[email protected]> > > The per-node proactive reclaim interface > (/sys/devices/system/node/nodeX/reclaim) accepts a swappiness parameter, > but it is silently ignored when CONFIG_MEMCG is disabled. The root cause > is that sc_swappiness() has separate implementations for CONFIG_MEMCG and > !CONFIG_MEMCG, and the latter never checks proactive_swappiness. > > Patch 1 moves mem_cgroup_swappiness() and vm_swappiness out of the public > include/linux/swap.h into the mm-private mm/swap.h, and makes the helper > handle both CONFIG_MEMCG and !CONFIG_MEMCG in a single inline function. > This is a prerequisite for unifying sc_swappiness(). > > Patch 2 consolidates sc_swappiness() into a single definition that works > regardless of CONFIG_MEMCG, fixing the node reclaim swappiness bug. Thanks, I updated mm.git to this version. > v3 -> v4: > - READ_ONCE() was missed when reading memcg->swappiness, add it back. > > v2 -> v3: > - Simplify mem_cgroup_swappiness as suggested by Johannes. > - Rebase on the next-20260722 Here's how v3 plus v4 altered mm.git: mm/swap.h | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) --- a/mm/swap.h~b +++ a/mm/swap.h @@ -105,18 +105,11 @@ extern int vm_swappiness; static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) { #ifdef CONFIG_MEMCG_V1 - /* Cgroup2 doesn't have per-cgroup swappiness */ - if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) - return READ_ONCE(vm_swappiness); - - /* root ? */ - if (mem_cgroup_disabled() || mem_cgroup_is_root(memcg)) - return READ_ONCE(vm_swappiness); - - return READ_ONCE(memcg->swappiness); -#else - return READ_ONCE(vm_swappiness); + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && + !mem_cgroup_disabled() && !mem_cgroup_is_root(memcg)) + return READ_ONCE(memcg->swappiness); #endif + return READ_ONCE(vm_swappiness); } #ifdef CONFIG_SWAP _