]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
fscrypt: move fscrypt_set_bio_crypt_ctx_bh to buffer.c
authorChristoph Hellwig <hch@lst.de>
Mon, 2 Mar 2026 14:18:10 +0000 (06:18 -0800)
committerEric Biggers <ebiggers@kernel.org>
Mon, 9 Mar 2026 20:31:50 +0000 (13:31 -0700)
fscrypt_set_bio_crypt_ctx_bh is only used by submit_bh_wbc now.  Move it
there and merge bh_get_inode_and_lblk_num into it.

Note that this does not add ifdefs for fscrypt as the compiler will
optimize away the dead code if it is not built in.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20260302141922.370070-6-hch@lst.de
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
fs/buffer.c
fs/crypto/inline_crypt.c
include/linux/fscrypt.h

index 22b43642ba57496ce365b3aa6f1b61a256c8316b..b6504ec7fa4cd7fbbc32ed043337c4410216c279 100644 (file)
@@ -2774,6 +2774,24 @@ static void end_bio_bh_io_sync(struct bio *bio)
        bio_put(bio);
 }
 
+static void buffer_set_crypto_ctx(struct bio *bio, const struct buffer_head *bh,
+                                 gfp_t gfp_mask)
+{
+       const struct address_space *mapping = folio_mapping(bh->b_folio);
+       const struct inode *inode;
+       u64 lblk;
+
+       /*
+        * The ext4 journal (jbd2) can submit a buffer_head it directly created
+        * for a non-pagecache page.  fscrypt doesn't care about these.
+        */
+       if (!mapping)
+               return;
+       inode = mapping->host;
+       lblk = (folio_pos(bh->b_folio) + bh_offset(bh)) >> inode->i_blkbits;
+       fscrypt_set_bio_crypt_ctx(bio, inode, lblk, gfp_mask);
+}
+
 static void submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh,
                          enum rw_hint write_hint,
                          struct writeback_control *wbc)
@@ -2800,7 +2818,8 @@ static void submit_bh_wbc(blk_opf_t opf, struct buffer_head *bh,
 
        bio = bio_alloc(bh->b_bdev, 1, opf, GFP_NOIO);
 
-       fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
+       if (IS_ENABLED(CONFIG_FS_ENCRYPTION))
+               buffer_set_crypto_ctx(bio, bh, GFP_NOIO);
 
        bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
        bio->bi_write_hint = write_hint;
index 0da53956a9b12c3eed593ccc6e9d6968e6ab53e1..702d13d138aa4f7a3c81534fb61be1b39ec7375f 100644 (file)
@@ -314,51 +314,6 @@ void fscrypt_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
 }
 EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx);
 
-/* Extract the inode and logical block number from a buffer_head. */
-static bool bh_get_inode_and_lblk_num(const struct buffer_head *bh,
-                                     const struct inode **inode_ret,
-                                     u64 *lblk_num_ret)
-{
-       struct folio *folio = bh->b_folio;
-       const struct address_space *mapping;
-       const struct inode *inode;
-
-       /*
-        * The ext4 journal (jbd2) can submit a buffer_head it directly created
-        * for a non-pagecache page.  fscrypt doesn't care about these.
-        */
-       mapping = folio_mapping(folio);
-       if (!mapping)
-               return false;
-       inode = mapping->host;
-
-       *inode_ret = inode;
-       *lblk_num_ret = (folio_pos(folio) + bh_offset(bh)) >> inode->i_blkbits;
-       return true;
-}
-
-/**
- * fscrypt_set_bio_crypt_ctx_bh() - prepare a file contents bio for inline
- *                                 crypto
- * @bio: a bio which will eventually be submitted to the file
- * @first_bh: the first buffer_head for which I/O will be submitted
- * @gfp_mask: memory allocation flags
- *
- * Same as fscrypt_set_bio_crypt_ctx(), except this takes a buffer_head instead
- * of an inode and block number directly.
- */
-void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
-                                 const struct buffer_head *first_bh,
-                                 gfp_t gfp_mask)
-{
-       const struct inode *inode;
-       u64 first_lblk;
-
-       if (bh_get_inode_and_lblk_num(first_bh, &inode, &first_lblk))
-               fscrypt_set_bio_crypt_ctx(bio, inode, first_lblk, gfp_mask);
-}
-EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx_bh);
-
 /**
  * fscrypt_mergeable_bio() - test whether data can be added to a bio
  * @bio: the bio being built up
index 6af3c1907adc67692058871c19b95b004da2bcea..26561b7994e034c512312da5596333d9144319ea 100644 (file)
@@ -869,10 +869,6 @@ void fscrypt_set_bio_crypt_ctx(struct bio *bio,
                               const struct inode *inode, u64 first_lblk,
                               gfp_t gfp_mask);
 
-void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
-                                 const struct buffer_head *first_bh,
-                                 gfp_t gfp_mask);
-
 bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
                           u64 next_lblk);
 
@@ -891,11 +887,6 @@ static inline void fscrypt_set_bio_crypt_ctx(struct bio *bio,
                                             const struct inode *inode,
                                             u64 first_lblk, gfp_t gfp_mask) { }
 
-static inline void fscrypt_set_bio_crypt_ctx_bh(
-                                        struct bio *bio,
-                                        const struct buffer_head *first_bh,
-                                        gfp_t gfp_mask) { }
-
 static inline bool fscrypt_mergeable_bio(struct bio *bio,
                                         const struct inode *inode,
                                         u64 next_lblk)