[RFC PATCH 0/3] mm, memcg: isolate deprecated v1 state from struct mem_cgroup

From: Tao Cui

Date: Wed Sep 16 2026 - 09:06:09 EST


From: Tao Cui <cuitao@xxxxxxxxxx>

The legacy cgroup v1 memory controller has already been moved out of
the shared implementation at the file level (mm/memcontrol-v1.c) and at
the Kconfig level (CONFIG_MEMCG_V1, default n since 6.11). Its
per-cgroup state, however, still sits as individual members inside
struct mem_cgroup, guarded by #ifdefs.

This series isolates the deprecated implementation from the shared hot
structure: all v1-only members are grouped into a dedicated
struct mem_cgroup_v1, and every access goes through memcg->v1.X.

With this in place the v1 implementation is self-contained: its
interface in mm/memcontrol-v1.c, its state in struct mem_cgroup_v1, and
its eventual removal becomes a localized deletion of this struct
together with mm/memcontrol-v1.c, instead of unwinding
ifdef-scattered members across the shared header.

Patch 1 introduces the substruct behind a transitional union whose
anonymous side preserves the historical layout, so the patch is
semantically empty. Patch 2 converts the access sites and drops the
anonymous side. Patch 3 documents the boundary.

This demonstrates one possible pattern for isolating deprecated cgroup
v1 implementation from shared structures.

As a validation detail, this does not regress the layout: the member
order is preserved, so offsetof(struct mem_cgroup, v1.swappiness) and
sizeof(struct mem_cgroup) are unchanged (verified with pahole), and the
generated code of hot paths such as mem_cgroup_swappiness() is
identical. Build-tested with CONFIG_MEMCG_V1 both enabled and
disabled, and boot-tested with both a v1 and a v2 hierarchy.

Tao Cui (3):
mm, memcg: introduce struct mem_cgroup_v1
mm, memcg: move v1-only members into mem_cgroup_v1
docs: cgroup-v1: note the v1 memory controller implementation boundary

.../admin-guide/cgroup-v1/memory.rst | 7 +
include/linux/memcontrol.h | 74 +++++------
include/net/sock.h | 2 +-
mm/memcontrol-v1.c | 122 +++++++++---------
mm/memcontrol-v1.h | 4 +-
mm/memcontrol.c | 22 ++--
mm/swap.h | 2 +-
7 files changed, 121 insertions(+), 112 deletions(-)

--
2.43.0