Re: [PATCH v2 1/2] memcg: move mem_cgroup_swappiness and vm_swappiness to mm/swap.h
Tao Cui <[email protected]>
| Newsgroups | org.kernel.vger.cgroups,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Reviewed-by: Song Hu <[email protected]> 在 2026/7/16 11:17, Ridong 写道: > From: Ridong Chen <[email protected]> > > The per-memcg swappiness knob is v1-only; v2 always uses global > vm_swappiness and ignores the per-cgroup field. > > Both mem_cgroup_swappiness() and vm_swappiness are only used within > mm/ (memcontrol.c, memcontrol-v1.c, vmscan.c), so move them out of the > public include/linux/swap.h into the mm-private mm/swap.h. This keeps > unrelated declarations out of include/linux/swap.h. > > Guard memcg->swappiness with CONFIG_MEMCG_V1 as well, so v2-only > kernels drop the unused field. > > No functional change for v1; v2-only kernels drop the unused field. > > Signed-off-by: Ridong Chen <[email protected]> > --- > include/linux/memcontrol.h | 4 ++-- > include/linux/swap.h | 19 ------------------- > mm/memcontrol.c | 4 ++-- > mm/swap.h | 20 ++++++++++++++++++++ > 4 files changed, 24 insertions(+), 23 deletions(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 957260677678..e7a794dfb40e 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,8 @@ 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[]; > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 696ed01709c2..330a420fd6de 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -309,7 +309,6 @@ static inline bool lru_cache_disabled(void) > } > > 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) > @@ -468,25 +467,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 *memcg) > -{ > - 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 22f55aeb94f3..d6ba276740ea 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -63,6 +63,7 @@ > #include <linux/sched/isolation.h> > #include <linux/kmemleak.h> > #include "internal.h" > +#include "swap.h" > #include "swap_table.h" > #include <net/sock.h> > #include <net/ip.h> > @@ -4174,11 +4175,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); > diff --git a/mm/swap.h b/mm/swap.h > index b51ad3071a73..a0e04b97a466 100644 > --- a/mm/swap.h > +++ b/mm/swap.h > @@ -4,6 +4,7 @@ > > #include <linux/atomic.h> /* for atomic_long_t */ > #include <linux/mm.h> /* for PAGE_SHIFT */ > +#include <linux/memcontrol.h> /* for mem_cgroup_swappiness() */ > struct mempolicy; > struct swap_iocb; > struct swap_memcg_table; > @@ -76,6 +77,25 @@ enum swap_cluster_flags { > CLUSTER_FLAG_MAX, > }; > > +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); > +#endif > +} > + > #ifdef CONFIG_SWAP > #include <linux/swapops.h> /* for swp_offset */ > #include <linux/blk_types.h> /* for bio_end_io_t */