Re: [PATCH v3 02/15] iomap: move read/readahead bio submission logic into helper function

Darrick J. Wong
2025-09-18T21:27:44Z

On Tue, Sep 16, 2025 at 04:44:12PM -0700, Joanne Koong wrote:
> Move the read/readahead bio submission logic into a separate helper.
> This is needed to make iomap read/readahead more generically usable,
> especially for filesystems that do not require CONFIG_BLOCK.
>
> Signed-off-by: Joanne Koong <joannelkoong@gmail.com>

Looks good to me!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
> fs/iomap/buffered-io.c | 30 ++++++++++++++++--------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
> index 05399aaa1361..ee96558b6d99 100644
> --- a/fs/iomap/buffered-io.c
> +++ b/fs/iomap/buffered-io.c
> @@ -357,6 +357,14 @@ struct iomap_readpage_ctx {
> struct readahead_control *rac;
> };
>
> +static void iomap_bio_submit_read(struct iomap_readpage_ctx *ctx)
> +{
> + struct bio *bio = ctx->bio;
> +
> + if (bio)
> + submit_bio(bio);
> +}
> +
> static void iomap_bio_read_folio_range(const struct iomap_iter *iter,
> struct iomap_readpage_ctx *ctx, loff_t pos, size_t plen)
> {
> @@ -382,8 +390,7 @@ static void iomap_bio_read_folio_range(const struct iomap_iter *iter,
> gfp_t orig_gfp = gfp;
> unsigned int nr_vecs = DIV_ROUND_UP(length, PAGE_SIZE);
>
> - if (ctx->bio)
> - submit_bio(ctx->bio);
> + iomap_bio_submit_read(ctx);
>
> if (ctx->rac) /* same as readahead_gfp_mask */
> gfp |= __GFP_NORETRY | __GFP_NOWARN;
> @@ -478,13 +485,10 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops)
> while ((ret = iomap_iter(&iter, ops)) > 0)
> iter.status = iomap_read_folio_iter(&iter, &ctx);
>
> - if (ctx.bio) {
> - submit_bio(ctx.bio);
> - WARN_ON_ONCE(!ctx.cur_folio_in_bio);
> - } else {
> - WARN_ON_ONCE(ctx.cur_folio_in_bio);
> + iomap_bio_submit_read(&ctx);
> +
> + if (!ctx.cur_folio_in_bio)
> folio_unlock(folio);
> - }
>
> /*
> * Just like mpage_readahead and block_read_full_folio, we always
> @@ -550,12 +554,10 @@ void iomap_readahead(struct readahead_control *rac, const struct iomap_ops *ops)
> while (iomap_iter(&iter, ops) > 0)
> iter.status = iomap_readahead_iter(&iter, &ctx);
>
> - if (ctx.bio)
> - submit_bio(ctx.bio);
> - if (ctx.cur_folio) {
> - if (!ctx.cur_folio_in_bio)
> - folio_unlock(ctx.cur_folio);
> - }
> + iomap_bio_submit_read(&ctx);
> +
> + if (ctx.cur_folio && !ctx.cur_folio_in_bio)
> + folio_unlock(ctx.cur_folio);
> }
> EXPORT_SYMBOL_GPL(iomap_readahead);
>
> --
> 2.47.3
>
>