On Thu, Feb 26, 2026 at 06:49:24AM -0800, Christoph Hellwig wrote: > ext4 already has the inode and folio and can't have a NULL > folio->mapping in this path. Open code fscrypt_mergeable_bio_bh in > io_submit_need_new_bio based on these simplifying assumptions. > > Signed-off-by: Christoph Hellwig <[email protected]> > --- > fs/crypto/inline_crypt.c | 23 ----------------------- > fs/ext4/page-io.c | 8 ++++++-- > include/linux/fscrypt.h | 9 --------- > 3 files changed, 6 insertions(+), 34 deletions(-) > > diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c > index c0852b920dbc..0da53956a9b1 100644 > --- a/fs/crypto/inline_crypt.c > +++ b/fs/crypto/inline_crypt.c > @@ -406,29 +406,6 @@ bool fscrypt_mergeable_bio(struct bio *bio, const struct > inode *inode, > } > EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio); > > -/** > - * fscrypt_mergeable_bio_bh() - test whether data can be added to a bio > - * @bio: the bio being built up > - * @next_bh: the next buffer_head for which I/O will be submitted > - * > - * Same as fscrypt_mergeable_bio(), except this takes a buffer_head instead > of > - * an inode and block number directly. > - * > - * Return: true iff the I/O is mergeable > - */ > -bool fscrypt_mergeable_bio_bh(struct bio *bio, > - const struct buffer_head *next_bh) > -{ > - const struct inode *inode; > - u64 next_lblk; > - > - if (!bh_get_inode_and_lblk_num(next_bh, &inode, &next_lblk)) > - return !bio->bi_crypt_context; > - > - return fscrypt_mergeable_bio(bio, inode, next_lblk); > -} > -EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio_bh); > - > /** > * fscrypt_dio_supported() - check whether DIO (direct I/O) is supported on > an > * inode, as far as encryption is concerned > diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c > index 88226979c503..3db3c19a29e5 100644 > --- a/fs/ext4/page-io.c > +++ b/fs/ext4/page-io.c > @@ -441,11 +441,15 @@ static void io_submit_init_bio(struct ext4_io_submit > *io, > } > > static bool io_submit_need_new_bio(struct ext4_io_submit *io, > + struct inode *inode, > + struct folio *io_folio, > struct buffer_head *bh) > { > if (bh->b_blocknr != io->io_next_block) > return true; > - if (!fscrypt_mergeable_bio_bh(io->io_bio, bh)) > + if (!fscrypt_mergeable_bio(io->io_bio, inode, > + (folio_pos(io_folio) + bh_offset(bh)) >> > + inode->i_blkbits)) > return true; > return false; > } > @@ -456,7 +460,7 @@ static void io_submit_add_bh(struct ext4_io_submit *io, > struct folio *io_folio, > struct buffer_head *bh) > { > - if (io->io_bio && io_submit_need_new_bio(io, bh)) { > + if (io->io_bio && io_submit_need_new_bio(io, inode, io_folio, bh)) { > submit_and_retry: > ext4_io_submit(io); > }
As in patch 2, this needs to use 'folio', not 'io_folio'. - Eric
