mm/slub.c | 3 +++ 1 file changed, 3 insertions(+)
SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't
check this flag. We should return false unconditionally when
SLAB_NO_OBJ_EXT is set.
Signed-off-by: Hao Li <hao.li@linux.dev>
---
mm/slub.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/mm/slub.c b/mm/slub.c
index 865047eaf02b..3b1402e1c39d 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -901,6 +901,9 @@ static inline unsigned long get_orig_size(struct kmem_cache *s, void *object)
*/
static inline bool need_slab_obj_exts(struct kmem_cache *s)
{
+ if (s->flags & SLAB_NO_OBJ_EXT)
+ return false;
+
if (memcg_kmem_online() && (s->flags & SLAB_ACCOUNT))
return true;
--
2.50.1
On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote:
> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't
> check this flag. We should return false unconditionally when
> SLAB_NO_OBJ_EXT is set.
>
> Signed-off-by: Hao Li <hao.li@linux.dev>
> ---
Looks reasonable to me,
Acked-by: Harry Yoo <harry.yoo@oracle.com>
Thanks!
> mm/slub.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 865047eaf02b..3b1402e1c39d 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -901,6 +901,9 @@ static inline unsigned long get_orig_size(struct kmem_cache *s, void *object)
> */
> static inline bool need_slab_obj_exts(struct kmem_cache *s)
> {
> + if (s->flags & SLAB_NO_OBJ_EXT)
> + return false;
> +
> if (memcg_kmem_online() && (s->flags & SLAB_ACCOUNT))
> return true;
>
--
Cheers,
Harry / Hyeonggon
On 2/6/26 01:53, Harry Yoo wrote:
> On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote:
>> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't
>> check this flag. We should return false unconditionally when
>> SLAB_NO_OBJ_EXT is set.
>>
>> Signed-off-by: Hao Li <hao.li@linux.dev>
>> ---
>
> Looks reasonable to me,
> Acked-by: Harry Yoo <harry.yoo@oracle.com>
Thanks, added to slab/for-7.0/obj_metadata
I think it doesn't change anything at the moment? But a correct thing to do.
> Thanks!
>
>> mm/slub.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/mm/slub.c b/mm/slub.c
>> index 865047eaf02b..3b1402e1c39d 100644
>> --- a/mm/slub.c
>> +++ b/mm/slub.c
>> @@ -901,6 +901,9 @@ static inline unsigned long get_orig_size(struct kmem_cache *s, void *object)
>> */
>> static inline bool need_slab_obj_exts(struct kmem_cache *s)
>> {
>> + if (s->flags & SLAB_NO_OBJ_EXT)
>> + return false;
>> +
>> if (memcg_kmem_online() && (s->flags & SLAB_ACCOUNT))
>> return true;
>>
>
On Fri, Feb 06, 2026 at 10:40:54AM +0100, Vlastimil Babka wrote: > On 2/6/26 01:53, Harry Yoo wrote: > > On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote: > >> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't > >> check this flag. We should return false unconditionally when > >> SLAB_NO_OBJ_EXT is set. > >> > >> Signed-off-by: Hao Li <hao.li@linux.dev> > >> --- > > > > Looks reasonable to me, > > Acked-by: Harry Yoo <harry.yoo@oracle.com> > > Thanks, added to slab/for-7.0/obj_metadata > I think it doesn't change anything at the moment? ...unless you enable memory allocation profiling :) > But a correct thing to do. -- Cheers, Harry / Hyeonggon
On 2/6/26 11:01, Harry Yoo wrote: > On Fri, Feb 06, 2026 at 10:40:54AM +0100, Vlastimil Babka wrote: >> On 2/6/26 01:53, Harry Yoo wrote: >> > On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote: >> >> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't >> >> check this flag. We should return false unconditionally when >> >> SLAB_NO_OBJ_EXT is set. >> >> >> >> Signed-off-by: Hao Li <hao.li@linux.dev> >> >> --- >> > >> > Looks reasonable to me, >> > Acked-by: Harry Yoo <harry.yoo@oracle.com> >> >> Thanks, added to slab/for-7.0/obj_metadata >> I think it doesn't change anything at the moment? > > ...unless you enable memory allocation profiling :) If I do, would kmem_cache or kmem_cache_node caches gotten obj_exts in leftover space? >> But a correct thing to do. >
On Fri, Feb 06, 2026 at 11:03:08AM +0100, Vlastimil Babka wrote: > On 2/6/26 11:01, Harry Yoo wrote: > > On Fri, Feb 06, 2026 at 10:40:54AM +0100, Vlastimil Babka wrote: > >> On 2/6/26 01:53, Harry Yoo wrote: > >> > On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote: > >> >> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't > >> >> check this flag. We should return false unconditionally when > >> >> SLAB_NO_OBJ_EXT is set. > >> >> > >> >> Signed-off-by: Hao Li <hao.li@linux.dev> > >> >> --- > >> > > >> > Looks reasonable to me, > >> > Acked-by: Harry Yoo <harry.yoo@oracle.com> > >> > >> Thanks, added to slab/for-7.0/obj_metadata > >> I think it doesn't change anything at the moment? > > > > ...unless you enable memory allocation profiling :) > > If I do, would kmem_cache or kmem_cache_node caches gotten obj_exts in > leftover space? /me builds and tests a new kernel with mem profiling always enabled... Yes, but only if merging is disabled. If you disable slab merging with `slab_nomerge`, kmem_cache gets obj_exts from SLAB_OBJ_EXTS_IN_OBJ. When I enable debug feature slab_debug=P (and thus change s->size), kmem_cache_node gets obj_exts from SLAB_OBJ_EXTS_IN_OBJ. -- Cheers, Harry / Hyeonggon
On Fri, Feb 06, 2026 at 07:21:29PM +0900, Harry Yoo wrote: > On Fri, Feb 06, 2026 at 11:03:08AM +0100, Vlastimil Babka wrote: > > On 2/6/26 11:01, Harry Yoo wrote: > > > On Fri, Feb 06, 2026 at 10:40:54AM +0100, Vlastimil Babka wrote: > > >> On 2/6/26 01:53, Harry Yoo wrote: > > >> > On Thu, Feb 05, 2026 at 08:07:23PM +0800, Hao Li wrote: > > >> >> SLAB_NO_OBJ_EXT is set for boot caches, but need_slab_obj_exts() doesn't > > >> >> check this flag. We should return false unconditionally when > > >> >> SLAB_NO_OBJ_EXT is set. > > >> >> > > >> >> Signed-off-by: Hao Li <hao.li@linux.dev> > > >> >> --- > > >> > > > >> > Looks reasonable to me, > > >> > Acked-by: Harry Yoo <harry.yoo@oracle.com> > > >> > > >> Thanks, added to slab/for-7.0/obj_metadata > > >> I think it doesn't change anything at the moment? > > > > > > ...unless you enable memory allocation profiling :) > > > > If I do, would kmem_cache or kmem_cache_node caches gotten obj_exts in > > leftover space? > > /me builds and tests a new kernel with mem profiling always enabled... > > Yes, but only if merging is disabled. > > If you disable slab merging with `slab_nomerge`, kmem_cache gets > obj_exts from SLAB_OBJ_EXTS_IN_OBJ. > > When I enable debug feature slab_debug=P (and thus change s->size), > kmem_cache_node gets obj_exts from SLAB_OBJ_EXTS_IN_OBJ. Thanks for testing, this matches what I've seen too. Besides, even if the two boot caches, kmem_cache and kmem_cache_node, go through the SLAB_OBJ_EXT_IN_OBJ path, it seems it wouldn't cause real trouble. We'd just end up doing some unnecessary memset. So, as Vlastimil said, this patch is mostly about doing the right thing. -- Thanks, Hao > > -- > Cheers, > Harry / Hyeonggon
© 2016 - 2026 Red Hat, Inc.