On 4/3/24 1:39 PM, Aishwarya TCV wrote: > > > On 25/03/2024 08:20, Vlastimil Babka wrote: >> The MEMCG_KMEM integration with slab currently relies on two hooks >> during allocation. memcg_slab_pre_alloc_hook() determines the objcg and >> charges it, and memcg_slab_post_alloc_hook() assigns the objcg pointer >> to the allocated object(s). >> >> As Linus pointed out, this is unnecessarily complex. Failing to charge >> due to memcg limits should be rare, so we can optimistically allocate >> the object(s) and do the charging together with assigning the objcg >> pointer in a single post_alloc hook. In the rare case the charging >> fails, we can free the object(s) back. >> >> This simplifies the code (no need to pass around the objcg pointer) and >> potentially allows to separate charging from allocation in cases where >> it's common that the allocation would be immediately freed, and the >> memcg handling overhead could be saved. >> >> Suggested-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> >> Link: https://lore.kernel.org/all/CAHk-=whYOOdM7jWy5jdrAm8LxcgCMFyk2bt8fYYvZzM4U-zAQA@xxxxxxxxxxxxxx/ >> Reviewed-by: Roman Gushchin <roman.gushchin@xxxxxxxxx> >> Reviewed-by: Chengming Zhou <chengming.zhou@xxxxxxxxx> >> Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> >> --- >> mm/slub.c | 180 +++++++++++++++++++++++++++----------------------------------- >> 1 file changed, 77 insertions(+), 103 deletions(-) > > Hi Vlastimil, > > When running the LTP test "memcg_limit_in_bytes" against next-master > (next-20240402) kernel with Arm64 on JUNO, oops is observed in our CI. I > can send the full logs if required. It is observed to work fine on > softiron-overdrive-3000. > > A bisect identified 11bb2d9d91627935c63ea3e6a031fd238c846e1 as the first > bad commit. Bisected it on the tag "next-20240402" at repo > "https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git". > > This works fine on Linux version v6.9-rc2 Oops, sorry, can you verify that this fixes it? Thanks. ----8<---- >From b0597c220624fef4f10e26079a3ff1c86f02a12b Mon Sep 17 00:00:00 2001 From: Vlastimil Babka <vbabka@xxxxxxx> Date: Wed, 3 Apr 2024 17:45:15 +0200 Subject: [PATCH] fixup! mm, slab: move memcg charging to post-alloc hook The call to memcg_alloc_abort_single() is wrong, it expects a pointer to single object, not an array. Reported-by: Aishwarya TCV <aishwarya.tcv@xxxxxxx> Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> --- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index f5b151a58b7d..b32e79629ae7 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2100,7 +2100,7 @@ bool memcg_slab_post_alloc_hook(struct kmem_cache *s, struct list_lru *lru, return true; if (likely(size == 1)) { - memcg_alloc_abort_single(s, p); + memcg_alloc_abort_single(s, *p); *p = NULL; } else { kmem_cache_free_bulk(s, size, p); -- 2.44.0