diff options
author | Gilad Ben-Yossef <gilad@benyossef.com> | 2017-10-18 08:00:33 +0100 |
---|---|---|
committer | Mircea Pop <mircea.pop@nxp.com> | 2019-05-14 09:54:33 +0200 |
commit | e7f44829c5b6db57f40d8b3875777dfb1845d502 (patch) | |
tree | b4ab0ed95deccdcde336d913ec5b43ff01d6a503 /crypto | |
parent | 2934d959389f5ea3c15d7237f3acf6928c809f88 (diff) |
crypto: change transient busy return code to -ENOSPC
The crypto API was using the -EBUSY return value to indicate
both a hard failure to submit a crypto operation into a
transformation provider when the latter was busy and the backlog
mechanism was not enabled as well as a notification that the
operation was queued into the backlog when the backlog mechanism
was enabled.
Having the same return code indicate two very different conditions
depending on a flag is both error prone and requires extra runtime
check like the following to discern between the cases:
if (err == -EINPROGRESS ||
(err == -EBUSY && (ahash_request_flags(req) &
CRYPTO_TFM_REQ_MAY_BACKLOG)))
This patch changes the return code used to indicate a crypto op
failed due to the transformation provider being transiently busy
to -ENOSPC.
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
(cherry picked from commit 6b80ea389a0bceee6a0a801474b78ad0a8cd034d)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/algapi.c | 6 | ||||
-rw-r--r-- | crypto/cryptd.c | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c index 50eb828db767..9a636f961572 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c @@ -909,9 +909,11 @@ int crypto_enqueue_request(struct crypto_queue *queue, int err = -EINPROGRESS; if (unlikely(queue->qlen >= queue->max_qlen)) { - err = -EBUSY; - if (!(request->flags & CRYPTO_TFM_REQ_MAY_BACKLOG)) + if (!(request->flags & CRYPTO_TFM_REQ_MAY_BACKLOG)) { + err = -ENOSPC; goto out; + } + err = -EBUSY; if (queue->backlog == &queue->list) queue->backlog = &request->list; } diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 248f6ba41688..c32b98b5daf8 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c @@ -137,16 +137,14 @@ static int cryptd_enqueue_request(struct cryptd_queue *queue, int cpu, err; struct cryptd_cpu_queue *cpu_queue; atomic_t *refcnt; - bool may_backlog; cpu = get_cpu(); cpu_queue = this_cpu_ptr(queue->cpu_queue); err = crypto_enqueue_request(&cpu_queue->queue, request); refcnt = crypto_tfm_ctx(request->tfm); - may_backlog = request->flags & CRYPTO_TFM_REQ_MAY_BACKLOG; - if (err == -EBUSY && !may_backlog) + if (err == -ENOSPC) goto out_put_cpu; queue_work_on(cpu, kcrypto_wq, &cpu_queue->work); |