]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: use writeback_iter directly in mpage_writepages
authorChristoph Hellwig <hch@lst.de>
Wed, 7 May 2025 06:21:24 +0000 (08:21 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 9 May 2025 10:37:48 +0000 (12:37 +0200)
Stop using write_cache_pages and use writeback_iter directly.  This
removes an indirect call per written folio and makes the code easier
to follow.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/20250507062124.3933305-1-hch@lst.de
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/mpage.c

index ad7844de87c3045f758f1560ccc0b526d4b9fa23..c5fd821fd30e5349aeb838eaeebea6827d5b4443 100644 (file)
@@ -445,10 +445,9 @@ static void clean_buffers(struct folio *folio, unsigned first_unmapped)
                try_to_free_buffers(folio);
 }
 
-static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
-                     void *data)
+static int mpage_write_folio(struct writeback_control *wbc, struct folio *folio,
+               struct mpage_data *mpd)
 {
-       struct mpage_data *mpd = data;
        struct bio *bio = mpd->bio;
        struct address_space *mapping = folio->mapping;
        struct inode *inode = mapping->host;
@@ -656,14 +655,16 @@ mpage_writepages(struct address_space *mapping,
        struct mpage_data mpd = {
                .get_block      = get_block,
        };
+       struct folio *folio = NULL;
        struct blk_plug plug;
-       int ret;
+       int error;
 
        blk_start_plug(&plug);
-       ret = write_cache_pages(mapping, wbc, __mpage_writepage, &mpd);
+       while ((folio = writeback_iter(mapping, wbc, folio, &error)))
+               error = mpage_write_folio(wbc, folio, &mpd);
        if (mpd.bio)
                mpage_bio_submit_write(mpd.bio);
        blk_finish_plug(&plug);
-       return ret;
+       return error;
 }
 EXPORT_SYMBOL(mpage_writepages);