mm: pass a folio to __swap_writepage()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 13 Dec 2023 21:58:31 +0000 (21:58 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 29 Dec 2023 19:58:29 +0000 (11:58 -0800)
Both callers now have a folio, so pass that in instead of the page.
Removes a few hidden calls to compound_head().

Link: https://lkml.kernel.org/r/20231213215842.671461-3-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
mm/swap.h
mm/zswap.c

index cb559ae324c6723e286701d7fa026644f62bc749..e0d59f36b70bedd1b3ad3c5d2a988eddf157e399 100644 (file)
@@ -201,7 +201,7 @@ int swap_writepage(struct page *page, struct writeback_control *wbc)
                folio_end_writeback(folio);
                return 0;
        }
-       __swap_writepage(&folio->page, wbc);
+       __swap_writepage(folio, wbc);
        return 0;
 }
 
@@ -368,22 +368,22 @@ static void swap_writepage_bdev_async(struct page *page,
        submit_bio(bio);
 }
 
-void __swap_writepage(struct page *page, struct writeback_control *wbc)
+void __swap_writepage(struct folio *folio, struct writeback_control *wbc)
 {
-       struct swap_info_struct *sis = page_swap_info(page);
+       struct swap_info_struct *sis = swp_swap_info(folio->swap);
 
-       VM_BUG_ON_PAGE(!PageSwapCache(page), page);
+       VM_BUG_ON_FOLIO(!folio_test_swapcache(folio), folio);
        /*
         * ->flags can be updated non-atomicially (scan_swap_map_slots),
         * but that will never affect SWP_FS_OPS, so the data_race
         * is safe.
         */
        if (data_race(sis->flags & SWP_FS_OPS))
-               swap_writepage_fs(page, wbc);
+               swap_writepage_fs(&folio->page, wbc);
        else if (sis->flags & SWP_SYNCHRONOUS_IO)
-               swap_writepage_bdev_sync(page, wbc, sis);
+               swap_writepage_bdev_sync(&folio->page, wbc, sis);
        else
-               swap_writepage_bdev_async(page, wbc, sis);
+               swap_writepage_bdev_async(&folio->page, wbc, sis);
 }
 
 void swap_write_unplug(struct swap_iocb *sio)
index a60ab1cfcaf2f7c3dfd3f6cd2aeb7ed0fa15c13e..b81587740cf137d2780aae18974d9357c76d2b48 100644 (file)
--- a/mm/swap.h
+++ b/mm/swap.h
@@ -19,7 +19,7 @@ static inline void swap_read_unplug(struct swap_iocb *plug)
 }
 void swap_write_unplug(struct swap_iocb *sio);
 int swap_writepage(struct page *page, struct writeback_control *wbc);
-void __swap_writepage(struct page *page, struct writeback_control *wbc);
+void __swap_writepage(struct folio *folio, struct writeback_control *wbc);
 
 /* linux/mm/swap_state.c */
 /* One swap address space for each 64M swap space */
index 6d9ee2a5334a9e5196bbd9edf5c62cc6f5daa275..f760801a3ea87ccef81fb65bd3e954c245200f62 100644 (file)
@@ -1446,7 +1446,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
        folio_set_reclaim(folio);
 
        /* start writeback */
-       __swap_writepage(&folio->page, &wbc);
+       __swap_writepage(folio, &wbc);
        folio_put(folio);
 
        return 0;