slab: Remove folio references in slab alloc/free

Use pages directly to further the split between slab and folio.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Link: https://patch.msgid.link/20251113000932.1589073-5-willy@infradead.org
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
Matthew Wilcox (Oracle) 2025-11-13 00:09:18 +00:00 committed by Vlastimil Babka
parent ea4702b170
commit 09fa19e2f3
1 changed files with 13 additions and 13 deletions

View File

@ -3045,24 +3045,24 @@ static inline struct slab *alloc_slab_page(gfp_t flags, int node,
struct kmem_cache_order_objects oo, struct kmem_cache_order_objects oo,
bool allow_spin) bool allow_spin)
{ {
struct folio *folio; struct page *page;
struct slab *slab; struct slab *slab;
unsigned int order = oo_order(oo); unsigned int order = oo_order(oo);
if (unlikely(!allow_spin)) if (unlikely(!allow_spin))
folio = (struct folio *)alloc_frozen_pages_nolock(0/* __GFP_COMP is implied */, page = alloc_frozen_pages_nolock(0/* __GFP_COMP is implied */,
node, order); node, order);
else if (node == NUMA_NO_NODE) else if (node == NUMA_NO_NODE)
folio = (struct folio *)alloc_frozen_pages(flags, order); page = alloc_frozen_pages(flags, order);
else else
folio = (struct folio *)__alloc_frozen_pages(flags, order, node, NULL); page = __alloc_frozen_pages(flags, order, node, NULL);
if (!folio) if (!page)
return NULL; return NULL;
slab = folio_slab(folio); __SetPageSlab(page);
__folio_set_slab(folio); slab = page_slab(page);
if (folio_is_pfmemalloc(folio)) if (page_is_pfmemalloc(page))
slab_set_pfmemalloc(slab); slab_set_pfmemalloc(slab);
return slab; return slab;
@ -3286,16 +3286,16 @@ static struct slab *new_slab(struct kmem_cache *s, gfp_t flags, int node)
static void __free_slab(struct kmem_cache *s, struct slab *slab) static void __free_slab(struct kmem_cache *s, struct slab *slab)
{ {
struct folio *folio = slab_folio(slab); struct page *page = slab_page(slab);
int order = folio_order(folio); int order = compound_order(page);
int pages = 1 << order; int pages = 1 << order;
__slab_clear_pfmemalloc(slab); __slab_clear_pfmemalloc(slab);
folio->mapping = NULL; page->mapping = NULL;
__folio_clear_slab(folio); __ClearPageSlab(page);
mm_account_reclaimed_pages(pages); mm_account_reclaimed_pages(pages);
unaccount_slab(slab, order, s); unaccount_slab(slab, order, s);
free_frozen_pages(&folio->page, order); free_frozen_pages(page, order);
} }
static void rcu_free_slab(struct rcu_head *h) static void rcu_free_slab(struct rcu_head *h)