On Wed, Dec 10, 2025 at 04:23:34PM +0100, Christoph Hellwig wrote: > The current code in blk_crypto_fallback_encrypt_bio is inefficient and > prone to deadlocks under memory pressure: It first walks the passed in > plaintext bio to see how much of it can fit into a single encrypted > bio using up to BIO_MAX_VEC PAGE_SIZE segments, and then allocates a > plaintext clone that fits the size, only to allocate another bio for > the ciphertext later. While the plaintext clone uses a bioset to avoid > deadlocks when allocations could fail, the ciphertex one uses bio_kmalloc > which is a no-go in the file system I/O path. > > Switch blk_crypto_fallback_encrypt_bio to walk the source plaintext bio > while consuming bi_iter without cloning it, and instead allocate a > ciphertext bio at the beginning and whenever we fille up the previous > one. The existing bio_set for the plaintext clones is reused for the > ciphertext bios to remove the deadlock risk. > > Signed-off-by: Christoph Hellwig <[email protected]> > --- > block/blk-crypto-fallback.c | 164 +++++++++++++++--------------------- > 1 file changed, 66 insertions(+), 98 deletions(-)
Reviewed-by: Eric Biggers <[email protected]> - Eric
