mm: free non-hugetlb large folios in a batch
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 5 Apr 2024 15:32:23 +0000 (16:32 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 26 Apr 2024 03:56:43 +0000 (20:56 -0700)
Patch series "Clean up __folio_put()".

With all the changes over the last few years, __folio_put_small and
__folio_put_large have become almost identical to each other ...  except
you can't tell because they're spread over two files.  Rearrange it all so
that you can tell, and then inline them both into __folio_put().

This patch (of 5):

free_unref_folios() can now handle non-hugetlb large folios, so keep
normal large folios in the batch.  hugetlb folios still need to be handled
specially.

[peterx@redhat.com: fix panic]
Link: https://lkml.kernel.org/r/ZikjPB0Dt5HA8-uL@x1n
Link: https://lkml.kernel.org/r/20240405153228.2563754-1-willy@infradead.org
Link: https://lkml.kernel.org/r/20240405153228.2563754-2-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/swap.c

index f72364e92d5f4f2220c2bbab7dc936d5c1ea110e..d7db3cd4e80a61c8b5d9fb497f1dc40a1467156f 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -158,8 +158,8 @@ void put_pages_list(struct list_head *pages)
        list_for_each_entry_safe(folio, next, pages, lru) {
                if (!folio_put_testzero(folio))
                        continue;
-               if (folio_test_large(folio)) {
-                       __folio_put_large(folio);
+               if (folio_test_hugetlb(folio)) {
+                       free_huge_folio(folio);
                        continue;
                }
                /* LRU flag must be clear because it's passed using the lru */