Re: [PATCH -v4 0/2] mm: vmscan: fix node reclaim ignoring swappiness parameter

From: Andrew Morton

Date: Thu Jul 23 2026 - 20:34:33 EST


On Thu, 23 Jul 2026 11:24:32 +0800 Ridong <ridong.chen@xxxxxxxxx> wrote:

> From: Ridong Chen <chenridong@xxxxxxxxxx>
>
> 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
_