From: Matthew Wilcox (Oracle) Date: Fri, 14 Mar 2025 04:33:29 +0000 (-0400) Subject: mpage: Use writeback_iter() instead of write_cache_pages() X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fwritepage;p=users%2Fwilly%2Fpagecache.git 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) --- 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);