From: Ridong Chen <ridong.chen@linux.dev>
To: Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@kernel.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Shakeel Butt <shakeel.butt@linux.dev>,
Andrew Morton <akpm@linux-foundation.org>,
Chris Li <chrisl@kernel.org>, Kairui Song <kasong@tencent.com>
Cc: Muchun Song <muchun.song@linux.dev>,
Kemeng Shi <shikemeng@huaweicloud.com>,
Nhat Pham <nphamcs@gmail.com>, Baoquan He <baoquan.he@linux.dev>,
Barry Song <baohua@kernel.org>,
Youngjun Park <youngjun.park@lge.com>,
cgroups@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, Ridong Chen <chenridong@xiaomi.com>
Subject: Re: [PATCH -next] memcg: move mem_cgroup_swappiness to memcontrol.h
Date: Sat, 11 Jul 2026 17:17:35 +0800 [thread overview]
Message-ID: <a8698739-6987-4f4c-aa68-ff0fb98a0c29@linux.dev> (raw)
In-Reply-To: <20260710111224.2355668-1-ridong.chen@linux.dev>
On 7/10/2026 7:12 PM, Ridong wrote:
> From: Ridong Chen <chenridong@xiaomi.com>
>
> The per-memcg swappiness knob is v1-only; v2 always uses global
> vm_swappiness and ignores the per-cgroup field.
>
> Guard memcg->swappiness with CONFIG_MEMCG_V1, and move the helper
> to memcontrol.h where it belongs.
>
> No functional change for v1; v2-only kernels drop the unused field.
>
> Signed-off-by: Ridong Chen <chenridong@xiaomi.com>
> ---
> include/linux/memcontrol.h | 25 +++++++++++++++++++++++--
> include/linux/swap.h | 19 -------------------
> mm/memcontrol.c | 3 +--
> 3 files changed, 24 insertions(+), 23 deletions(-)
>
> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
> index e1f46a0016fc..f59614956f96 100644
> --- a/include/linux/memcontrol.h
> +++ b/include/linux/memcontrol.h
> @@ -239,8 +239,6 @@ struct mem_cgroup {
> */
> bool oom_group;
>
> - int swappiness;
> -
> /* memory.events and memory.events.local */
> struct cgroup_file events_file;
> struct cgroup_file events_local_file;
> @@ -318,6 +316,9 @@ struct mem_cgroup {
> /* List of events which userspace want to receive */
> struct list_head event_list;
> spinlock_t event_list_lock;
> +
> + int swappiness;
> +
> #endif /* CONFIG_MEMCG_V1 */
>
> struct mem_cgroup_per_node *nodeinfo[];
> @@ -365,6 +366,9 @@ enum objext_flags {
>
> #define OBJEXTS_FLAGS_MASK (__NR_OBJEXTS_FLAGS - 1)
>
> +/* Defined in mm/vmscan.c; used by mem_cgroup_swappiness(). */
> +extern int vm_swappiness;
> +
> #ifdef CONFIG_MEMCG
> /*
> * After the initialization objcg->memcg is always pointing at
> @@ -1440,6 +1444,23 @@ static inline void mem_cgroup_flush_workqueue(void) { }
> static inline int mem_cgroup_init(void) { return 0; }
> #endif /* CONFIG_MEMCG */
>
> +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);
> +#endif
> +}
> +
> /*
> * Extended information for slab objects stored as an array in page->memcg_data
> * if MEMCG_DATA_OBJEXTS is set.
> diff --git a/include/linux/swap.h b/include/linux/swap.h
> index 3f31b6a56788..f27e73f29195 100644
> --- a/include/linux/swap.h
> +++ b/include/linux/swap.h
> @@ -366,7 +366,6 @@ extern unsigned long mem_cgroup_shrink_node(struct mem_cgroup *mem,
> pg_data_t *pgdat,
> unsigned long *nr_scanned);
> extern unsigned long shrink_all_memory(unsigned long nr_pages);
> -extern int vm_swappiness;
> long remove_mapping(struct address_space *mapping, struct folio *folio);
>
> #if defined(CONFIG_SYSFS) && defined(CONFIG_NUMA)
> @@ -530,25 +529,7 @@ static inline int add_swap_extent(struct swap_info_struct *sis,
> }
> #endif /* CONFIG_SWAP */
> #ifdef CONFIG_MEMCG
> -static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg)
> -{
> - /* 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);
> -}
> -
> void lru_reparent_memcg(struct mem_cgroup *memcg, struct mem_cgroup *parent, int nid);
> -#else
> -static inline int mem_cgroup_swappiness(struct mem_cgroup *mem)
> -{
> - return READ_ONCE(vm_swappiness);
> -}
> #endif
>
> #if defined(CONFIG_SWAP) && defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP)
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 938f190a98fe..2d659b76cd77 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -4174,11 +4174,10 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
> #endif
> page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX);
> if (parent) {
> - WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent));
> -
> page_counter_init(&memcg->memory, &parent->memory, memcg_on_dfl);
> page_counter_init(&memcg->swap, &parent->swap, false);
> #ifdef CONFIG_MEMCG_V1
> + WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent));
> memcg->memory.track_failcnt = !memcg_on_dfl;
> WRITE_ONCE(memcg->oom_kill_disable, READ_ONCE(parent->oom_kill_disable));
> page_counter_init(&memcg->kmem, &parent->kmem, false);
I have resent this patch [1], as I found another issue related to it.
[1]
https://lore.kernel.org/linux-mm/20260711091157.306070-1-ridong.chen@linux.dev/
--
Best regards,
Ridong
prev parent reply other threads:[~2026-07-11 9:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 11:12 [PATCH -next] memcg: move mem_cgroup_swappiness to memcontrol.h Ridong
2026-07-10 12:21 ` Johannes Weiner
2026-07-11 9:17 ` Ridong Chen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a8698739-6987-4f4c-aa68-ff0fb98a0c29@linux.dev \
--to=ridong.chen@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=baoquan.he@linux.dev \
--cc=cgroups@vger.kernel.org \
--cc=chenridong@xiaomi.com \
--cc=chrisl@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=nphamcs@gmail.com \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=shikemeng@huaweicloud.com \
--cc=youngjun.park@lge.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.