From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
Christian Brauner <brauner@kernel.org>,
Carlos Maiolino <cem@kernel.org>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Anuj Gupta <anuj20.g@samsung.com>,
Kanchan Joshi <joshi.k@samsung.com>,
linux-block@vger.kernel.org, nvdimm@lists.linux.dev,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 11/15] iomap: allow file systems to hook into buffered read bio submission
Date: Wed, 21 Jan 2026 16:49:33 -0800 [thread overview]
Message-ID: <20260122004933.GO5945@frogsfrogsfrogs> (raw)
In-Reply-To: <20260121064339.206019-12-hch@lst.de>
On Wed, Jan 21, 2026 at 07:43:19AM +0100, Christoph Hellwig wrote:
> Files ystems such as btrfs have additional operations with bios such as
Filesystems
> verifying data checksums. Allow file systems to hook into submission
> of the bio to allow for this processing by replacing the direct
> submit_bio call in iomap_read_alloc_bio with a call into ->submit_read
> and exporting iomap_read_alloc_bio. Also add a new field to
> struct iomap_read_folio_ctx to track the file logic offset of the current
> read context.
Basically you're enabling filesystems to know what's the offset of a
read bio that iomap is about to start? I guess that enables btrfs to
stash that info somewhere so that when the bio completes, it can go look
up the checksum or something, and compare?
Or for PI the filesystem can do the PI validation itself and if that
fails, decide if it's going to do something evil like ask another
replica to try reading the information?
(Not that iomap handles overlapping redundant mappings at all...)
--D
> Based on a patch from Goldwyn Rodrigues <rgoldwyn@suse.com>.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/iomap/bio.c | 15 +++++++++------
> include/linux/iomap.h | 4 ++++
> 2 files changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/fs/iomap/bio.c b/fs/iomap/bio.c
> index 80bbd328bd3c..903cb9fe759e 100644
> --- a/fs/iomap/bio.c
> +++ b/fs/iomap/bio.c
> @@ -32,10 +32,11 @@ static void iomap_read_alloc_bio(const struct iomap_iter *iter,
> struct folio *folio = ctx->cur_folio;
> gfp_t gfp = mapping_gfp_constraint(folio->mapping, GFP_KERNEL);
> gfp_t orig_gfp = gfp;
> - struct bio *bio = ctx->read_ctx;
> + struct bio *bio;
>
> - if (bio)
> - submit_bio(bio);
> + /* Submit the existing range if there was one. */
> + if (ctx->read_ctx)
> + ctx->ops->submit_read(iter, ctx);
>
> /* Same as readahead_gfp_mask: */
> if (ctx->rac)
> @@ -56,9 +57,10 @@ static void iomap_read_alloc_bio(const struct iomap_iter *iter,
> bio_add_folio_nofail(bio, folio, plen,
> offset_in_folio(folio, iter->pos));
> ctx->read_ctx = bio;
> + ctx->read_ctx_file_offset = iter->pos;
> }
>
> -static int iomap_bio_read_folio_range(const struct iomap_iter *iter,
> +int iomap_bio_read_folio_range(const struct iomap_iter *iter,
> struct iomap_read_folio_ctx *ctx, size_t plen)
> {
> struct folio *folio = ctx->cur_folio;
> @@ -70,10 +72,11 @@ static int iomap_bio_read_folio_range(const struct iomap_iter *iter,
> iomap_read_alloc_bio(iter, ctx, plen);
> return 0;
> }
> +EXPORT_SYMBOL_GPL(iomap_bio_read_folio_range);
>
> const struct iomap_read_ops iomap_bio_read_ops = {
> - .read_folio_range = iomap_bio_read_folio_range,
> - .submit_read = iomap_bio_submit_read,
> + .read_folio_range = iomap_bio_read_folio_range,
> + .submit_read = iomap_bio_submit_read,
> };
> EXPORT_SYMBOL_GPL(iomap_bio_read_ops);
>
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index bf6280fc51af..b3f545d41720 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -493,6 +493,7 @@ struct iomap_read_folio_ctx {
> struct folio *cur_folio;
> struct readahead_control *rac;
> void *read_ctx;
> + loff_t read_ctx_file_offset;
> };
>
> struct iomap_read_ops {
> @@ -599,6 +600,9 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,
> extern struct bio_set iomap_ioend_bioset;
>
> #ifdef CONFIG_BLOCK
> +int iomap_bio_read_folio_range(const struct iomap_iter *iter,
> + struct iomap_read_folio_ctx *ctx, size_t plen);
> +
> extern const struct iomap_read_ops iomap_bio_read_ops;
>
> static inline void iomap_bio_read_folio(struct folio *folio,
> --
> 2.47.3
>
>
next prev parent reply other threads:[~2026-01-22 0:49 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-21 6:43 support file system generated / verified integrity information Christoph Hellwig
2026-01-21 6:43 ` [PATCH 01/15] block: factor out a bio_integrity_action helper Christoph Hellwig
2026-01-23 0:01 ` Darrick J. Wong
2026-01-23 6:03 ` Christoph Hellwig
2026-01-23 7:13 ` Darrick J. Wong
2026-01-26 5:03 ` Christoph Hellwig
2026-01-25 19:46 ` Kanchan Joshi
2026-01-27 14:07 ` Martin K. Petersen
2026-01-27 14:55 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 02/15] block: factor out a bio_integrity_setup_default helper Christoph Hellwig
2026-01-23 0:05 ` Darrick J. Wong
2026-01-23 6:08 ` Christoph Hellwig
2026-01-23 7:14 ` Darrick J. Wong
2026-01-25 20:14 ` Kanchan Joshi
2026-01-27 14:08 ` Martin K. Petersen
2026-01-27 14:55 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 03/15] block: add a bdev_has_integrity_csum helper Christoph Hellwig
2026-01-23 0:07 ` Darrick J. Wong
2026-01-26 18:03 ` Kanchan Joshi
2026-01-27 14:08 ` Martin K. Petersen
2026-01-27 14:55 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 04/15] block: prepare generation / verification helpers for fs usage Christoph Hellwig
2026-01-23 0:07 ` Darrick J. Wong
2026-01-26 18:04 ` Kanchan Joshi
2026-01-27 14:09 ` Martin K. Petersen
2026-01-27 14:56 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 05/15] block: make max_integrity_io_size public Christoph Hellwig
2026-01-23 0:08 ` Darrick J. Wong
2026-01-26 18:04 ` Kanchan Joshi
2026-01-27 14:10 ` Martin K. Petersen
2026-01-27 14:56 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 06/15] block: add fs_bio_integrity helpers Christoph Hellwig
2026-01-23 0:11 ` Darrick J. Wong
2026-01-26 18:12 ` Kanchan Joshi
2026-01-27 5:15 ` Christoph Hellwig
2026-01-27 14:12 ` Martin K. Petersen
2026-01-27 14:57 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 07/15] block: pass a maxlen argument to bio_iov_iter_bounce Christoph Hellwig
2026-01-22 1:04 ` Darrick J. Wong
2026-01-22 6:04 ` Christoph Hellwig
2026-01-22 18:02 ` Darrick J. Wong
2026-01-27 14:12 ` Martin K. Petersen
2026-01-27 14:57 ` Anuj gupta
2026-01-21 6:43 ` [PATCH 08/15] iomap: refactor iomap_bio_read_folio_range Christoph Hellwig
2026-01-22 0:42 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 09/15] iomap: pass the iomap_iter to ->submit_read Christoph Hellwig
2026-01-22 0:43 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 10/15] iomap: only call into ->submit_read when there is a read_ctx Christoph Hellwig
2026-01-22 0:44 ` Darrick J. Wong
2026-01-22 2:44 ` Joanne Koong
2026-01-22 5:59 ` Christoph Hellwig
2026-01-22 18:02 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 11/15] iomap: allow file systems to hook into buffered read bio submission Christoph Hellwig
2026-01-22 0:49 ` Darrick J. Wong [this message]
2026-01-22 6:01 ` Christoph Hellwig
2026-01-22 18:04 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 12/15] iomap: add a bioset pointer to iomap_read_folio_ops Christoph Hellwig
2026-01-22 0:49 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 13/15] iomap: support ioends for buffered reads Christoph Hellwig
2026-01-22 0:50 ` Darrick J. Wong
2026-01-21 6:43 ` [PATCH 14/15] iomap: support T10 protection information Christoph Hellwig
2026-01-22 0:59 ` Darrick J. Wong
2026-01-22 6:03 ` Christoph Hellwig
2026-01-21 6:43 ` [PATCH 15/15] xfs: " Christoph Hellwig
2026-01-22 1:02 ` Darrick J. Wong
2026-01-27 14:54 ` support file system generated / verified integrity information Anuj gupta
2026-01-27 15:16 ` Christoph Hellwig
2026-01-29 9:23 ` Anuj Gupta
-- strict thread matches above, loose matches on Subject: below --
2026-01-28 16:14 support file system generated / verified integrity information v2 Christoph Hellwig
2026-01-28 16:15 ` [PATCH 11/15] iomap: allow file systems to hook into buffered read bio submission Christoph Hellwig
2026-02-18 6:11 support file system generated / verified integrity information v3 Christoph Hellwig
2026-02-18 6:12 ` [PATCH 11/15] iomap: allow file systems to hook into buffered read bio submission Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260122004933.GO5945@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=anuj20.g@samsung.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=cem@kernel.org \
--cc=hch@lst.de \
--cc=joshi.k@samsung.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=nvdimm@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox