mm/huge_memory: convert split_huge_pages_in_file() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 19 Oct 2022 18:33:29 +0000 (19:33 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 9 Nov 2022 01:37:18 +0000 (17:37 -0800)
Patch series "Remove FGP_HEAD flag".

We have just two users left of the FGP_HEAD flag and both of them are
better off; sometimes startlingly so as a result of conversion to use
folios.

This patch (of 4):

Removes a number of calls to compound_head() and a call to
pagecache_get_page().

Link: https://lkml.kernel.org/r/20221019183332.2802139-1-willy@infradead.org
Link: https://lkml.kernel.org/r/20221019183332.2802139-2-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/huge_memory.c

index 561a42567477dce391b8993125a680106c6dcae9..bc5dda3d2ad742e544ac0e3b904eb1f1202d542b 100644 (file)
@@ -3066,28 +3066,28 @@ static int split_huge_pages_in_file(const char *file_path, pgoff_t off_start,
        mapping = candidate->f_mapping;
 
        for (index = off_start; index < off_end; index += nr_pages) {
-               struct page *fpage = pagecache_get_page(mapping, index,
-                                               FGP_ENTRY | FGP_HEAD, 0);
+               struct folio *folio = __filemap_get_folio(mapping, index,
+                                               FGP_ENTRY, 0);
 
                nr_pages = 1;
-               if (xa_is_value(fpage) || !fpage)
+               if (xa_is_value(folio) || !folio)
                        continue;
 
-               if (!is_transparent_hugepage(fpage))
+               if (!folio_test_large(folio))
                        goto next;
 
                total++;
-               nr_pages = thp_nr_pages(fpage);
+               nr_pages = folio_nr_pages(folio);
 
-               if (!trylock_page(fpage))
+               if (!folio_trylock(folio))
                        goto next;
 
-               if (!split_huge_page(fpage))
+               if (!split_folio(folio))
                        split++;
 
-               unlock_page(fpage);
+               folio_unlock(folio);
 next:
-               put_page(fpage);
+               folio_put(folio);
                cond_resched();
        }