On Thu, Feb 26, 2026 at 06:49:22AM -0800, Christoph Hellwig wrote:
> io_submit_init_bio already has or can easily get at most information
> needed to set the crypto context.  Open code fscrypt_set_bio_crypt_ctx_bh
> based on that.
> 
> Signed-off-by: Christoph Hellwig <[email protected]>
> ---
>  fs/ext4/page-io.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
> index a3644d6cb65f..851d1267054a 100644
> --- a/fs/ext4/page-io.c
> +++ b/fs/ext4/page-io.c
> @@ -417,6 +417,7 @@ void ext4_io_submit_init(struct ext4_io_submit *io,
>  
>  static void io_submit_init_bio(struct ext4_io_submit *io,
>                              struct inode *inode,
> +                            struct folio *io_folio,
>                              struct buffer_head *bh)
>  {
>       struct bio *bio;
> @@ -426,7 +427,10 @@ static void io_submit_init_bio(struct ext4_io_submit *io,
>        * __GFP_DIRECT_RECLAIM is set, see comments for bio_alloc_bioset().
>        */
>       bio = bio_alloc(bh->b_bdev, BIO_MAX_VECS, REQ_OP_WRITE, GFP_NOIO);
> -     fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
> +     fscrypt_set_bio_crypt_ctx(bio, inode,
> +                     (folio_pos(io_folio) + bh_offset(bh)) >>
> +                             inode->i_blkbits,
> +                     GFP_NOIO);
>       bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
>       bio->bi_end_io = ext4_end_bio;
>       bio->bi_private = ext4_get_io_end(io->io_end);
> @@ -448,7 +452,7 @@ static void io_submit_add_bh(struct ext4_io_submit *io,
>               ext4_io_submit(io);
>       }
>       if (io->io_bio == NULL)
> -             io_submit_init_bio(io, inode, bh);
> +             io_submit_init_bio(io, inode, io_folio, bh);
>       if (!bio_add_folio(io->io_bio, io_folio, bh->b_size, bh_offset(bh)))
>               goto submit_and_retry;

This should use 'folio', not 'io_folio'.  folio_pos() works only for
pagecache folios.

- Eric

Reply via email to