[PATCH 0/2] fix kmem over-charging for embedded obj_exts array

ranxiaokai627
2026-03-10T11:38:41Z

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