[PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set

Hao Li posted 1 patch 1 day, 20 hours ago
mm/slub.c | 3 +++
1 file changed, 3 insertions(+)
[PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Hao Li 1 day, 20 hours ago
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
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Harry Yoo 1 day, 7 hours ago
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
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Vlastimil Babka 23 hours ago
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;
>>  
>
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Harry Yoo 22 hours ago
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
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Vlastimil Babka 22 hours ago
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.
>
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Harry Yoo 22 hours ago
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
Re: [PATCH] slub: let need_slab_obj_exts() return false if SLAB_NO_OBJ_EXT is set
Posted by Hao Li 21 hours ago
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