crypt_alloc_req_*() is using in_interrupt() to figure out the correct gfp_t mask for memory allocation. The usage of in_interrupt() in non-core code is phased out. Ideally the information of the calling context should be passed by the callers or the functions be split as appropriate. The top-most caller has already an `atomic' argument which is true if invoked from an atomic context. Use the `atomic' argument to create an allocation mask and pass it down to crypt_alloc_req_*(). Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> --- drivers/md/dm-crypt.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 0cdfee10d5a23..40c35efb9e929 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c @@ -1456,12 +1456,12 @@ static void kcryptd_async_done(struct crypto_async_request *async_req, int error); static int crypt_alloc_req_skcipher(struct crypt_config *cc, - struct convert_context *ctx) + struct convert_context *ctx, gfp_t gfp) { unsigned key_index = ctx->cc_sector & (cc->tfms_count - 1); if (!ctx->r.req) { - ctx->r.req = mempool_alloc(&cc->req_pool, in_interrupt() ? GFP_ATOMIC : GFP_NOIO); + ctx->r.req = mempool_alloc(&cc->req_pool, gfp); if (!ctx->r.req) return -ENOMEM; } @@ -1480,10 +1480,10 @@ static int crypt_alloc_req_skcipher(struct crypt_config *cc, } static int crypt_alloc_req_aead(struct crypt_config *cc, - struct convert_context *ctx) + struct convert_context *ctx, gfp_t gfp) { if (!ctx->r.req_aead) { - ctx->r.req_aead = mempool_alloc(&cc->req_pool, in_interrupt() ? GFP_ATOMIC : GFP_NOIO); + ctx->r.req_aead = mempool_alloc(&cc->req_pool, gfp); if (!ctx->r.req_aead) return -ENOMEM; } @@ -1501,13 +1501,13 @@ static int crypt_alloc_req_aead(struct crypt_config *cc, return 0; } -static int crypt_alloc_req(struct crypt_config *cc, - struct convert_context *ctx) +static int crypt_alloc_req(struct crypt_config *cc, struct convert_context *ctx, + gfp_t gfp) { if (crypt_integrity_aead(cc)) - return crypt_alloc_req_aead(cc, ctx); + return crypt_alloc_req_aead(cc, ctx, gfp); else - return crypt_alloc_req_skcipher(cc, ctx); + return crypt_alloc_req_skcipher(cc, ctx, gfp); } static void crypt_free_req_skcipher(struct crypt_config *cc, @@ -1556,7 +1556,7 @@ static blk_status_t crypt_convert(struct crypt_config *cc, while (ctx->iter_in.bi_size && ctx->iter_out.bi_size) { - r = crypt_alloc_req(cc, ctx); + r = crypt_alloc_req(cc, ctx, atomic ? GFP_ATOMIC : GFP_NOIO); if (r) { complete(&ctx->restart); return BLK_STS_DEV_RESOURCE; -- 2.30.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel