[PATCH 0/2] fix kmem over-charging for embedded obj_exts array
From: ranxiaokai627
Date: Tue Mar 10 2026 - 07:42:51 EST
From: Ran Xiaokai <ran.xiaokai@xxxxxxxxxx>
Since commit a77d6d338685 ("mm/slab: place slabobj_ext metadata
in unused space within s->size"), the struct slabobj_ext array can
use slab leftover space or be embedded into the slub object to save
memory. In these cases, no extra kmalloc space is allocated for the
obj_exts array.
However, obj_full_size() always returns extra sizeof(struct obj_cgroup *)
bytes for every object, which leads to over-charging for slabs with
embedded obj_exts.
This series optimizes obj_full_size() to check whether obj_exts uses
slab leftover space or is embedded in the object. If so, only the object
size is charged. Otherwise, the extra obj_cgroup pointer space is also
charged.
Patch1 moves obj_exts_in_slab() definition to slab.h so it can be
called from memcontrol.c.
Patch2 updates obj_full_size() to avoid over-charging.
Ran Xiaokai (2):
mm/slab: move obj_exts_in_slab() definition to slab.h
memcg: fix kmem over-charging for embedded obj_exts array
mm/memcontrol.c | 19 ++++++++++++++-----
mm/slab.h | 19 +++++++++++++++++++
mm/slub.c | 19 -------------------
3 files changed, 33 insertions(+), 24 deletions(-)
--
2.25.1