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

Vlastimil Babka
2026-02-10T16:45:15Z

On 2/2/26 16:56, Kiryl Shutsemau wrote:
> 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>

Reviewed-by: Vlastimil Babka <vbabka@suse.cz>

>
> ---
>
> 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;
>