On Mon, Jan 18, 2021 at 10:44 PM Pavel Machek <pavel@xxxxxxx> wrote: > > > > Fix this by allocating crypto requests with GFP_ATOMIC mask in > > interrupt context. > ... > > This one is wrong. > > > > +++ b/drivers/md/dm-crypt.c > > @@ -1454,13 +1454,16 @@ static int crypt_convert_block_skcipher( > > - if (!ctx->r.req) > > - ctx->r.req = mempool_alloc(&cc->req_pool, GFP_NOIO); > > + if (!ctx->r.req) { > > + ctx->r.req = mempool_alloc(&cc->req_pool, in_interrupt() ? GFP_ATOMIC : GFP_NOIO); > > Good so far. Ugly but good. > > > -static void crypt_alloc_req_aead(struct crypt_config *cc, > > +static int crypt_alloc_req_aead(struct crypt_config *cc, > > struct convert_context *ctx) > > { > > - if (!ctx->r.req_aead) > > - ctx->r.req_aead = mempool_alloc(&cc->req_pool, GFP_NOIO); > > + if (!ctx->r.req) { > > + ctx->r.req = mempool_alloc(&cc->req_pool, in_interrupt() ? GFP_ATOMIC : GFP_NOIO); > > + if (!ctx->r.req) > > + return -ENOMEM; > > + } > > But this one can't be good. We are now allocating different field in > the structure! Good catch! Sorry for the copy-paste. It is actually not a big deal, because this is not a structure, but a union: as long as the mempool was initialized with the correct size, it should be no different. Nevertheless, I'll send the patch to fix the typo. Regards, Ignat > Pavel > > -- > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany >