[dm-devel] [PATCH 6/6] dm crypt: Use `atomic' argument for memory allocation.
Sebastian Andrzej Siewior
bigeasy at linutronix.de
Sat Feb 13 11:11:46 UTC 2021
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 at linutronix.de>
---
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
More information about the dm-devel
mailing list