swap: convert swap_writepage() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 2 Sep 2022 19:46:36 +0000 (20:46 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 3 Oct 2022 21:02:52 +0000 (14:02 -0700)
Removes many calls to compound_head().

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

index fc6b3fb1f7c59647c05eea324c25930e6346ebe0..2af34dd8fa4db25fb60ed3c6fcce395eeb407f85 100644 (file)
@@ -180,29 +180,30 @@ bad_bmap:
  */
 int swap_writepage(struct page *page, struct writeback_control *wbc)
 {
+       struct folio *folio = page_folio(page);
        int ret = 0;
 
-       if (try_to_free_swap(page)) {
-               unlock_page(page);
+       if (folio_free_swap(folio)) {
+               folio_unlock(folio);
                goto out;
        }
        /*
         * Arch code may have to preserve more data than just the page
         * contents, e.g. memory tags.
         */
-       ret = arch_prepare_to_swap(page);
+       ret = arch_prepare_to_swap(&folio->page);
        if (ret) {
-               set_page_dirty(page);
-               unlock_page(page);
+               folio_mark_dirty(folio);
+               folio_unlock(folio);
                goto out;
        }
-       if (frontswap_store(page) == 0) {
-               set_page_writeback(page);
-               unlock_page(page);
-               end_page_writeback(page);
+       if (frontswap_store(&folio->page) == 0) {
+               folio_start_writeback(folio);
+               folio_unlock(folio);
+               folio_end_writeback(folio);
                goto out;
        }
-       ret = __swap_writepage(page, wbc);
+       ret = __swap_writepage(&folio->page, wbc);
 out:
        return ret;
 }