]> www.infradead.org Git - users/hch/misc.git/commitdiff
mm: stop passing a writeback_control structure to __swap_writepage
authorChristoph Hellwig <hch@lst.de>
Tue, 6 May 2025 16:05:38 +0000 (18:05 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 14 May 2025 04:51:24 +0000 (06:51 +0200)
__swap_writepage only needs the swap_iocb cookie from the
writeback_control structure, so pass it explicitly and remove the
now unused swap_iocb member from struct writeback_control.

Signed-off-by: Christoph Hellwig <hch@lst.de>
mm/page_io.c
mm/swap.h
mm/zswap.c

index c420b0aa0f22d932bf67792ac542cbd8b38b78c5..fb52bedcc9662ba8982bf6b05cc8143ceac1a76e 100644 (file)
@@ -281,7 +281,7 @@ int swap_writeout(struct folio *folio, struct writeback_control *wbc)
                return AOP_WRITEPAGE_ACTIVATE;
        }
 
-       __swap_writepage(folio, wbc);
+       __swap_writepage(folio, wbc->swap_plug);
        return 0;
 out_unlock:
        folio_unlock(folio);
@@ -371,9 +371,9 @@ static void sio_write_complete(struct kiocb *iocb, long ret)
        mempool_free(sio, sio_pool);
 }
 
-static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc)
+static void swap_writepage_fs(struct folio *folio, struct swap_iocb **swap_plug)
 {
-       struct swap_iocb *sio = NULL;
+       struct swap_iocb *sio = swap_plug ? *swap_plug : NULL;
        struct swap_info_struct *sis = swp_swap_info(folio->swap);
        struct file *swap_file = sis->swap_file;
        loff_t pos = swap_dev_pos(folio->swap);
@@ -381,8 +381,6 @@ static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc
        count_swpout_vm_event(folio);
        folio_start_writeback(folio);
        folio_unlock(folio);
-       if (wbc->swap_plug)
-               sio = *wbc->swap_plug;
        if (sio) {
                if (sio->iocb.ki_filp != swap_file ||
                    sio->iocb.ki_pos + sio->len != pos) {
@@ -401,22 +399,21 @@ static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc
        bvec_set_folio(&sio->bvec[sio->pages], folio, folio_size(folio), 0);
        sio->len += folio_size(folio);
        sio->pages += 1;
-       if (sio->pages == ARRAY_SIZE(sio->bvec) || !wbc->swap_plug) {
+       if (sio->pages == ARRAY_SIZE(sio->bvec) || !swap_plug) {
                swap_write_unplug(sio);
                sio = NULL;
        }
-       if (wbc->swap_plug)
-               *wbc->swap_plug = sio;
+       if (swap_plug)
+               *swap_plug = sio;
 }
 
 static void swap_writepage_bdev_sync(struct folio *folio,
-               struct writeback_control *wbc, struct swap_info_struct *sis)
+               struct swap_info_struct *sis)
 {
        struct bio_vec bv;
        struct bio bio;
 
-       bio_init(&bio, sis->bdev, &bv, 1,
-                REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc));
+       bio_init(&bio, sis->bdev, &bv, 1, REQ_OP_WRITE | REQ_SWAP);
        bio.bi_iter.bi_sector = swap_folio_sector(folio);
        bio_add_folio_nofail(&bio, folio, folio_size(folio), 0);
 
@@ -431,13 +428,11 @@ static void swap_writepage_bdev_sync(struct folio *folio,
 }
 
 static void swap_writepage_bdev_async(struct folio *folio,
-               struct writeback_control *wbc, struct swap_info_struct *sis)
+               struct swap_info_struct *sis)
 {
        struct bio *bio;
 
-       bio = bio_alloc(sis->bdev, 1,
-                       REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc),
-                       GFP_NOIO);
+       bio = bio_alloc(sis->bdev, 1, REQ_OP_WRITE | REQ_SWAP, GFP_NOIO);
        bio->bi_iter.bi_sector = swap_folio_sector(folio);
        bio->bi_end_io = end_swap_bio_write;
        bio_add_folio_nofail(bio, folio, folio_size(folio), 0);
@@ -449,7 +444,7 @@ static void swap_writepage_bdev_async(struct folio *folio,
        submit_bio(bio);
 }
 
-void __swap_writepage(struct folio *folio, struct writeback_control *wbc)
+void __swap_writepage(struct folio *folio, struct swap_iocb **swap_plug)
 {
        struct swap_info_struct *sis = swp_swap_info(folio->swap);
 
@@ -460,16 +455,16 @@ void __swap_writepage(struct folio *folio, struct writeback_control *wbc)
         * is safe.
         */
        if (data_race(sis->flags & SWP_FS_OPS))
-               swap_writepage_fs(folio, wbc);
+               swap_writepage_fs(folio, swap_plug);
        /*
         * ->flags can be updated non-atomicially (scan_swap_map_slots),
         * but that will never affect SWP_SYNCHRONOUS_IO, so the data_race
         * is safe.
         */
        else if (data_race(sis->flags & SWP_SYNCHRONOUS_IO))
-               swap_writepage_bdev_sync(folio, wbc, sis);
+               swap_writepage_bdev_sync(folio, sis);
        else
-               swap_writepage_bdev_async(folio, wbc, sis);
+               swap_writepage_bdev_async(folio, sis);
 }
 
 void swap_write_unplug(struct swap_iocb *sio)
index 2269eb9df0af79564d5b55e646cfb82945a607b6..045415e2eb4f74eb2004938a38714a10603666f3 100644 (file)
--- a/mm/swap.h
+++ b/mm/swap.h
@@ -21,7 +21,7 @@ static inline void swap_read_unplug(struct swap_iocb *plug)
 }
 void swap_write_unplug(struct swap_iocb *sio);
 int swap_writeout(struct folio *folio, struct writeback_control *wbc);
-void __swap_writepage(struct folio *folio, struct writeback_control *wbc);
+void __swap_writepage(struct folio *folio, struct swap_iocb **swap_plug);
 
 /* linux/mm/swap_state.c */
 /* One swap address space for each 64M swap space */
index 455e9425c5f522e94e631bf93d61a0ae8bdff629..3c0fd8a1371826349615951bc2e8fa50ad028d5b 100644 (file)
@@ -1070,9 +1070,6 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
        struct mempolicy *mpol;
        bool folio_was_allocated;
        struct swap_info_struct *si;
-       struct writeback_control wbc = {
-               .sync_mode = WB_SYNC_NONE,
-       };
        int ret = 0;
 
        /* try to allocate swap cache folio */
@@ -1134,7 +1131,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
        folio_set_reclaim(folio);
 
        /* start writeback */
-       __swap_writepage(folio, &wbc);
+       __swap_writepage(folio, NULL);
 
 out:
        if (ret && ret != -EEXIST) {