mirror of
https://github.com/brain-hackers/linux-brain.git
synced 2024-06-09 23:36:23 +09:00
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 6b80ea389a
)
This commit is contained in:
parent
2934d95938
commit
e7f44829c5
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user