mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-26 11:40:24 +02:00
fscrypt: move fscrypt_set_bio_crypt_ctx_bh to buffer.c
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>
This commit is contained in:
committed by
Eric Biggers
parent
588e7c048d
commit
a18b1ab816
+20
-1
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user