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);
        }
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index 516aba5b858b..6af3c1907adc 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -876,9 +876,6 @@ void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
 bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
                           u64 next_lblk);
 
-bool fscrypt_mergeable_bio_bh(struct bio *bio,
-                             const struct buffer_head *next_bh);
-
 bool fscrypt_dio_supported(struct inode *inode);
 
 u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 
nr_blocks);
@@ -906,12 +903,6 @@ static inline bool fscrypt_mergeable_bio(struct bio *bio,
        return true;
 }
 
-static inline bool fscrypt_mergeable_bio_bh(struct bio *bio,
-                                           const struct buffer_head *next_bh)
-{
-       return true;
-}
-
 static inline bool fscrypt_dio_supported(struct inode *inode)
 {
        return !fscrypt_needs_contents_encryption(inode);
-- 
2.47.3



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to