fs: use writeback_iter directly in mpage_writepages

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>
This commit is contained in:
Christoph Hellwig 2025-05-07 08:21:24 +02:00 committed by Christian Brauner
parent 9f81d70702
commit bb01e8cc10
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View 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);