mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 16:01:44 -04:00
ext4, fscrypt: merge fscrypt_mergeable_bio_bh into io_submit_need_new_bio
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 <hch@lst.de> Link: https://lore.kernel.org/r/20260302141922.370070-5-hch@lst.de Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
committed by
Eric Biggers
parent
5f18a9d2f7
commit
588e7c048d
@@ -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
|
||||
|
||||
@@ -440,11 +440,14 @@ 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 *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(folio) + bh_offset(bh)) >> inode->i_blkbits))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -455,7 +458,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, folio, bh)) {
|
||||
submit_and_retry:
|
||||
ext4_io_submit(io);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user