mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
mm: combine __folio_put_small, __folio_put_large and __folio_put
It's now obvious that __folio_put_small() and __folio_put_large() do almost exactly the same thing. Inline them both into __folio_put(). Link: https://lkml.kernel.org/r/20240405153228.2563754-5-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
2542b1ac9a
commit
79a4828751
32
mm/swap.c
32
mm/swap.c
@ -112,42 +112,22 @@ static void page_cache_release(struct folio *folio)
|
||||
unlock_page_lruvec_irqrestore(lruvec, flags);
|
||||
}
|
||||
|
||||
static void __folio_put_small(struct folio *folio)
|
||||
void __folio_put(struct folio *folio)
|
||||
{
|
||||
page_cache_release(folio);
|
||||
mem_cgroup_uncharge(folio);
|
||||
free_unref_page(&folio->page, 0);
|
||||
}
|
||||
|
||||
static void __folio_put_large(struct folio *folio)
|
||||
{
|
||||
/*
|
||||
* __page_cache_release() is supposed to be called for thp, not for
|
||||
* hugetlb. This is because hugetlb page does never have PageLRU set
|
||||
* (it's never listed to any LRU lists) and no memcg routines should
|
||||
* be called for hugetlb (it has a separate hugetlb_cgroup.)
|
||||
*/
|
||||
if (folio_test_hugetlb(folio)) {
|
||||
if (unlikely(folio_is_zone_device(folio))) {
|
||||
free_zone_device_page(&folio->page);
|
||||
return;
|
||||
} else if (folio_test_hugetlb(folio)) {
|
||||
free_huge_folio(folio);
|
||||
return;
|
||||
}
|
||||
|
||||
page_cache_release(folio);
|
||||
if (folio_test_large_rmappable(folio))
|
||||
if (folio_test_large(folio) && folio_test_large_rmappable(folio))
|
||||
folio_undo_large_rmappable(folio);
|
||||
mem_cgroup_uncharge(folio);
|
||||
free_unref_page(&folio->page, folio_order(folio));
|
||||
}
|
||||
|
||||
void __folio_put(struct folio *folio)
|
||||
{
|
||||
if (unlikely(folio_is_zone_device(folio)))
|
||||
free_zone_device_page(&folio->page);
|
||||
else if (unlikely(folio_test_large(folio)))
|
||||
__folio_put_large(folio);
|
||||
else
|
||||
__folio_put_small(folio);
|
||||
}
|
||||
EXPORT_SYMBOL(__folio_put);
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user