From: Eric Biggers Date: Wed, 16 Sep 2020 03:53:15 +0000 (-0700) Subject: block: warn if !__GFP_DIRECT_RECLAIM in bio_crypt_set_ctx() X-Git-Tag: v5.10-rc1~168^2~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cf785af19319f9fc0fc0c0604d259f1ef31b502f;p=thirdparty%2Fkernel%2Flinux.git block: warn if !__GFP_DIRECT_RECLAIM in bio_crypt_set_ctx() bio_crypt_set_ctx() assumes its gfp_mask argument always includes __GFP_DIRECT_RECLAIM, so that the mempool_alloc() will always succeed. For now this assumption is still fine, since no callers violate it. Making bio_crypt_set_ctx() able to fail would add unneeded complexity. However, if a caller didn't use __GFP_DIRECT_RECLAIM, it would be very hard to notice the bug. Make it easier by adding a WARN_ON_ONCE(). Signed-off-by: Eric Biggers Reviewed-by: Satya Tangirala Cc: Miaohe Lin Cc: Satya Tangirala Signed-off-by: Jens Axboe --- diff --git a/block/blk-crypto.c b/block/blk-crypto.c index bbe7974fd74f0..5da43f0973b46 100644 --- a/block/blk-crypto.c +++ b/block/blk-crypto.c @@ -81,7 +81,15 @@ subsys_initcall(bio_crypt_ctx_init); void bio_crypt_set_ctx(struct bio *bio, const struct blk_crypto_key *key, const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE], gfp_t gfp_mask) { - struct bio_crypt_ctx *bc = mempool_alloc(bio_crypt_ctx_pool, gfp_mask); + struct bio_crypt_ctx *bc; + + /* + * The caller must use a gfp_mask that contains __GFP_DIRECT_RECLAIM so + * that the mempool_alloc() can't fail. + */ + WARN_ON_ONCE(!(gfp_mask & __GFP_DIRECT_RECLAIM)); + + bc = mempool_alloc(bio_crypt_ctx_pool, gfp_mask); bc->bc_key = key; memcpy(bc->bc_dun, dun, sizeof(bc->bc_dun));