[PATCHv6 17/17] mm/slab: Use compound_head() in page_slab()

Kiryl Shutsemau
2026-02-02T15:59:00Z

page_slab() contained an open-coded implementation of compound_head().

Replace the duplicated code with a direct call to compound_head().

Signed-off-by: Kiryl Shutsemau <kas@kernel.org>

---

I am not sure if this open-coded version is intentional and required for
memdesc transition. Drop the patch if it is.
---
mm/slab.h | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/mm/slab.h b/mm/slab.h
index f68c3ac8126f..970a13ac5b8e 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -137,19 +137,7 @@ static_assert(IS_ALIGNED(offsetof(struct slab, freelist), sizeof(struct freelist
*/
static inline struct slab *page_slab(const struct page *page)
{
- unsigned long info;
-
- info = READ_ONCE(page->compound_info);
- if (info & 1) {
- /* See compound_head() */
- if (compound_info_has_mask()) {
- unsigned long p = (unsigned long)page;
- page = (struct page *)(p & info);
- } else {
- page = (struct page *)(info - 1);
- }
- }
-
+ page = compound_head(page);
if (data_race(page->page_type >> 24) != PGTY_slab)
page = NULL;

--
2.51.2