[PATCH v2 03/13] mm/slab: remove objs_per_slab()

From: Vlastimil Babka (SUSE)

Date: Mon Jul 20 2026 - 10:28:30 EST


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.

Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
Signed-off-by: Vlastimil Babka (SUSE) <vbabka@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 95fa6fbad11a..8c1031989e41 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2133,7 +2133,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;
@@ -2189,7 +2188,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