Re: [PATCH RFC 02/12] mm/slab: remove objs_per_slab()

From: Suren Baghdasaryan

Date: Wed Jul 15 2026 - 12:44:10 EST


On Wed, Jul 15, 2026 at 3:10 AM Vlastimil Babka (SUSE)
<vbabka@xxxxxxxxxx> wrote:
>
> The function has an unused kmem_cache argument and almost nothing uses
> it anyway; doing slab->objects is simpler. Remove it with the last two
> users. KUNIT_EXPECT_EQ() needs a cast to avoid "error: ‘typeof’ applied
> to a bit-field" but we don't need to keep a wrapper just for that.
>
> Signed-off-by: Vlastimil Babka (SUSE) <vbabka@xxxxxxxxxx>

Reviewed-by: Suren Baghdasayan <surenb@xxxxxxxxxx>

> ---
> mm/kfence/kfence_test.c | 2 +-
> mm/slab.h | 6 ------
> mm/slub.c | 3 +--
> 3 files changed, 2 insertions(+), 9 deletions(-)
>
> diff --git a/mm/kfence/kfence_test.c b/mm/kfence/kfence_test.c
> index de2d0f7d62b1..9867c03ef0ae 100644
> --- a/mm/kfence/kfence_test.c
> +++ b/mm/kfence/kfence_test.c
> @@ -295,7 +295,7 @@ static void *test_alloc(struct kunit *test, size_t size, gfp_t gfp, enum allocat
> * memcg accounting works correctly.
> */
> KUNIT_EXPECT_EQ(test, obj_to_index(s, slab, alloc), 0U);
> - KUNIT_EXPECT_EQ(test, objs_per_slab(s, slab), 1);
> + KUNIT_EXPECT_EQ(test, ((unsigned int)slab->objects), 1);
>
> if (policy == ALLOCATE_ANY)
> return alloc;
> diff --git a/mm/slab.h b/mm/slab.h
> index f5e336b6b6b0..01535e1e2d3c 100644
> --- a/mm/slab.h
> +++ b/mm/slab.h
> @@ -330,12 +330,6 @@ static inline unsigned int obj_to_index(const struct kmem_cache *cache,
> return __obj_to_index(cache, slab_address(slab), obj);
> }
>
> -static inline int objs_per_slab(const struct kmem_cache *cache,
> - const struct slab *slab)
> -{
> - return slab->objects;
> -}
> -
> /*
> * State of the slab allocator.
> *
> diff --git a/mm/slub.c b/mm/slub.c
> index a4be70d080fb..9e25f2dce7a6 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -2127,7 +2127,6 @@ int alloc_slab_obj_exts(struct slab *slab, struct kmem_cache *s,
> gfp_t gfp, unsigned int alloc_flags)
> {
> const bool allow_spin = alloc_flags_allow_spinning(alloc_flags);
> - unsigned int objects = objs_per_slab(s, slab);
> bool new_slab = alloc_flags & SLAB_ALLOC_NEW_SLAB;
> unsigned long new_exts;
> unsigned long old_exts;
> @@ -2183,7 +2182,7 @@ int alloc_slab_obj_exts(struct slab *slab, struct kmem_cache *s,
> #endif
> retry:
> old_exts = READ_ONCE(slab->obj_exts);
> - handle_failed_objexts_alloc(old_exts, vec, objects);
> + handle_failed_objexts_alloc(old_exts, vec, slab->objects);
>
> if (new_slab) {
> /*
>
> --
> 2.55.0
>