From 8f1d3bd559cecfdabcc4dee9b84c0dc7d28cffd9 Mon Sep 17 00:00:00 2001 From: "Matthew Wilcox (Oracle)" Date: Fri, 14 Mar 2025 00:33:29 -0400 Subject: [PATCH] mpage: Use writeback_iter() instead of write_cache_pages() Using the iterator directly adds a little type safety, converts an indirect call into a direct call and may allow the compiler to inline __mpage_writepage() into mpage_writepages(). Signed-off-by: Matthew Wilcox (Oracle) --- fs/mpage.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/mpage.c b/fs/mpage.c index ad7844de87c30..0f138b2dfae36 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -445,12 +445,11 @@ 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_writepage(struct address_space *mapping, + 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; const unsigned blkbits = inode->i_blkbits; const unsigned blocks_per_folio = folio_size(folio) >> blkbits; @@ -649,21 +648,22 @@ out: * This is a library function, which implements the writepages() * address_space_operation. */ -int -mpage_writepages(struct address_space *mapping, +int mpage_writepages(struct address_space *mapping, struct writeback_control *wbc, get_block_t get_block) { struct mpage_data mpd = { .get_block = get_block, }; struct blk_plug plug; - int ret; + struct folio *folio = NULL; + int err; blk_start_plug(&plug); - ret = write_cache_pages(mapping, wbc, __mpage_writepage, &mpd); + while ((folio = writeback_iter(mapping, wbc, folio, &err))) + err = __mpage_writepage(mapping, wbc, folio, &mpd); if (mpd.bio) mpage_bio_submit_write(mpd.bio); blk_finish_plug(&plug); - return ret; + return err; } EXPORT_SYMBOL(mpage_writepages); -- 2.50.1