swapfile: convert try_to_unuse() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 2 Sep 2022 19:46:30 +0000 (20:46 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 3 Oct 2022 21:02:50 +0000 (14:02 -0700)
Saves five calls to compound_head().

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

index aafe739..23cdbe8 100644 (file)
@@ -2032,7 +2032,7 @@ static int try_to_unuse(unsigned int type)
        struct list_head *p;
        int retval = 0;
        struct swap_info_struct *si = swap_info[type];
-       struct page *page;
+       struct folio *folio;
        swp_entry_t entry;
        unsigned int i;
 
@@ -2082,21 +2082,21 @@ retry:
               (i = find_next_to_unuse(si, i)) != 0) {
 
                entry = swp_entry(type, i);
-               page = find_get_page(swap_address_space(entry), i);
-               if (!page)
+               folio = filemap_get_folio(swap_address_space(entry), i);
+               if (!folio)
                        continue;
 
                /*
-                * It is conceivable that a racing task removed this page from
-                * swap cache just before we acquired the page lock. The page
+                * It is conceivable that a racing task removed this folio from
+                * swap cache just before we acquired the page lock. The folio
                 * might even be back in swap cache on another swap area. But
-                * that is okay, try_to_free_swap() only removes stale pages.
+                * that is okay, folio_free_swap() only removes stale folios.
                 */
-               lock_page(page);
-               wait_on_page_writeback(page);
-               try_to_free_swap(page);
-               unlock_page(page);
-               put_page(page);
+               folio_lock(folio);
+               folio_wait_writeback(folio);
+               folio_free_swap(folio);
+               folio_unlock(folio);
+               folio_put(folio);
        }
 
        /*