mirror of https://github.com/torvalds/linux.git
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:
parent
ea4702b170
commit
09fa19e2f3
26
mm/slub.c
26
mm/slub.c
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue