iomap: convert iomap_writepages to writeack_iter
authorChristoph Hellwig <hch@lst.de>
Fri, 12 Apr 2024 06:16:14 +0000 (08:16 +0200)
committerChristian Brauner <brauner@kernel.org>
Mon, 15 Apr 2024 12:25:55 +0000 (14:25 +0200)
This removes one indirect function call per folio, and adds type safety
by not casting through a void pointer.

Based on a patch by Matthew Wilcox.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240412061614.1511629-1-hch@lst.de
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/iomap/buffered-io.c

index 4e8e41c8b3c0e41c97ed544bfafbef4113f4fbd5..e09441f4fceb6f43308bebe03cce7c31c30f8295 100644 (file)
@@ -1958,18 +1958,13 @@ static int iomap_writepage_map(struct iomap_writepage_ctx *wpc,
        return error;
 }
 
-static int iomap_do_writepage(struct folio *folio,
-               struct writeback_control *wbc, void *data)
-{
-       return iomap_writepage_map(data, wbc, folio);
-}
-
 int
 iomap_writepages(struct address_space *mapping, struct writeback_control *wbc,
                struct iomap_writepage_ctx *wpc,
                const struct iomap_writeback_ops *ops)
 {
-       int                     ret;
+       struct folio *folio = NULL;
+       int error;
 
        /*
         * Writeback from reclaim context should never happen except in the case
@@ -1980,8 +1975,9 @@ iomap_writepages(struct address_space *mapping, struct writeback_control *wbc,
                return -EIO;
 
        wpc->ops = ops;
-       ret = write_cache_pages(mapping, wbc, iomap_do_writepage, wpc);
-       return iomap_submit_ioend(wpc, ret);
+       while ((folio = writeback_iter(mapping, wbc, folio, &error)))
+               error = iomap_writepage_map(wpc, wbc, folio);
+       return iomap_submit_ioend(wpc, error);
 }
 EXPORT_SYMBOL_GPL(iomap_writepages);