block: make bio_crypt_clone() able to fail
authorEric Biggers <ebiggers@google.com>
Wed, 16 Sep 2020 03:53:13 +0000 (20:53 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 5 Oct 2020 16:47:43 +0000 (10:47 -0600)
commit07560151db960d26b425410d6fd778e6757a5da2
tree2d8582959d8765348d923e745a187983f6c01aaf
parent10ed16662da9e28a33b6c991c36c6b323b03dd5b
block: make bio_crypt_clone() able to fail

bio_crypt_clone() assumes its gfp_mask argument always includes
__GFP_DIRECT_RECLAIM, so that the mempool_alloc() will always succeed.

However, bio_crypt_clone() might be called with GFP_ATOMIC via
setup_clone() in drivers/md/dm-rq.c, or with GFP_NOWAIT via
kcryptd_io_read() in drivers/md/dm-crypt.c.

Neither case is currently reachable with a bio that actually has an
encryption context.  However, it's fragile to rely on this.  Just make
bio_crypt_clone() able to fail, analogous to bio_integrity_clone().

Reported-by: Miaohe Lin <linmiaohe@huawei.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Mike Snitzer <snitzer@redhat.com>
Reviewed-by: Satya Tangirala <satyat@google.com>
Cc: Satya Tangirala <satyat@google.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c
block/blk-crypto.c
block/bounce.c
drivers/md/dm.c
include/linux/blk-crypto.h