From: Harry Yoo <harry.yoo@oracle.com>
To: Zhenhua Huang <quic_zhenhuah@quicinc.com>
Cc: cl@linux.com, rientjes@google.com, vbabka@suse.cz,
roman.gushchin@linux.dev, surenb@google.com,
pasha.tatashin@soleen.com, akpm@linux-foundation.org,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
quic_tingweiz@quicinc.com
Subject: Re: [PATCH] mm, slab: clean up slab->obj_exts always
Date: Sat, 19 Apr 2025 00:17:43 +0900 [thread overview]
Message-ID: <aAJtFwAH_ayIJ-SR@harry> (raw)
In-Reply-To: <20250418061459.3898802-1-quic_zhenhuah@quicinc.com>
On Fri, Apr 18, 2025 at 02:14:59PM +0800, Zhenhua Huang wrote:
> When memory allocation profiling is disabled at runtime or due to an
> error, shutdown_mem_profiling() is called: slab->obj_exts which
> previously allocated remains.
> It won't be cleared by unaccount_slab() because of
> mem_alloc_profiling_enabled() not true. It's incorrect, slab->obj_exts
> should always be cleaned up in unaccount_slab() to avoid following error:
>
> [...]BUG: Bad page state in process...
> ..
> [...]page dumped because: page still charged to cgroup
>
> Fixes: 21c690a349baa ("mm: introduce slabobj_ext to support slab object extensions")
> Signed-off-by: Zhenhua Huang <quic_zhenhuah@quicinc.com>
> ---
Acked-by: Harry Yoo <harry.yoo@oracle.com>
I reproduced the issue locally and confirmed that this patch fixes
the issue.
Tested-by: Harry Yoo <harry.yoo@oracle.com>
By the way, I think this should probably be backported to -stable?
--
Cheers,
Harry / Hyeonggon
> mm/slub.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index dac149df1be1..b42ce3a88806 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -2023,7 +2023,7 @@ int alloc_slab_obj_exts(struct slab *slab, struct kmem_cache *s,
> return 0;
> }
>
> -/* Should be called only if mem_alloc_profiling_enabled() */
> +/* Should be called if slab_obj_exts(slab) */
> static noinline void free_slab_obj_exts(struct slab *slab)
> {
> struct slabobj_ext *obj_exts;
> @@ -2592,7 +2592,11 @@ static __always_inline void account_slab(struct slab *slab, int order,
> static __always_inline void unaccount_slab(struct slab *slab, int order,
> struct kmem_cache *s)
> {
> - if (memcg_kmem_online() || need_slab_obj_ext())
> + /*
> + * The slab object extensions should now be freed regardless of
> + * whether mem_alloc_profiling_enabled() or not now.
> + */
> + if (memcg_kmem_online() || slab_obj_exts(slab))
> free_slab_obj_exts(slab);
>
> mod_node_page_state(slab_pgdat(slab), cache_vmstat_idx(s),
> --
> 2.25.1
>
>
next prev parent reply other threads:[~2025-04-18 15:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-18 6:14 [PATCH] mm, slab: clean up slab->obj_exts always Zhenhua Huang
2025-04-18 15:17 ` Harry Yoo [this message]
2025-04-18 23:09 ` Suren Baghdasaryan
2025-04-21 7:45 ` Zhenhua Huang
2025-04-21 7:42 ` Zhenhua Huang
2025-04-20 2:46 ` David Rientjes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aAJtFwAH_ayIJ-SR@harry \
--to=harry.yoo@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pasha.tatashin@soleen.com \
--cc=quic_tingweiz@quicinc.com \
--cc=quic_zhenhuah@quicinc.com \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.