crypto: lib/sha1 - remove unnecessary includes of linux/cryptohash.h
[sfrench/cifs-2.6.git] / crypto / algapi.c
index 69605e21af92278181fb879d3c2d6fdd5d90f771..92abdf675992c681ce5206a8c5783fc88495caa8 100644 (file)
@@ -403,7 +403,7 @@ static void crypto_wait_for_test(struct crypto_larval *larval)
        err = wait_for_completion_killable(&larval->completion);
        WARN_ON(err);
        if (!err)
-               crypto_probing_notify(CRYPTO_MSG_ALG_LOADED, larval);
+               crypto_notify(CRYPTO_MSG_ALG_LOADED, larval);
 
 out:
        crypto_larval_kill(&larval->alg);
@@ -716,17 +716,27 @@ EXPORT_SYMBOL_GPL(crypto_drop_spawn);
 
 static struct crypto_alg *crypto_spawn_alg(struct crypto_spawn *spawn)
 {
-       struct crypto_alg *alg;
+       struct crypto_alg *alg = ERR_PTR(-EAGAIN);
+       struct crypto_alg *target;
+       bool shoot = false;
 
        down_read(&crypto_alg_sem);
-       alg = spawn->alg;
-       if (!spawn->dead && !crypto_mod_get(alg)) {
-               alg->cra_flags |= CRYPTO_ALG_DYING;
-               alg = NULL;
+       if (!spawn->dead) {
+               alg = spawn->alg;
+               if (!crypto_mod_get(alg)) {
+                       target = crypto_alg_get(alg);
+                       shoot = true;
+                       alg = ERR_PTR(-EAGAIN);
+               }
        }
        up_read(&crypto_alg_sem);
 
-       return alg ?: ERR_PTR(-EAGAIN);
+       if (shoot) {
+               crypto_shoot_alg(target);
+               crypto_alg_put(target);
+       }
+
+       return alg;
 }
 
 struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type,
@@ -904,6 +914,14 @@ out:
 }
 EXPORT_SYMBOL_GPL(crypto_enqueue_request);
 
+void crypto_enqueue_request_head(struct crypto_queue *queue,
+                                struct crypto_async_request *request)
+{
+       queue->qlen++;
+       list_add(&request->list, &queue->list);
+}
+EXPORT_SYMBOL_GPL(crypto_enqueue_request_head);
+
 struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue)
 {
        struct list_head *request;