padata: make padata_do_parallel to return zero on success
authorSteffen Klassert <steffen.klassert@secunet.com>
Wed, 7 Jul 2010 13:32:02 +0000 (15:32 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 14 Jul 2010 12:29:29 +0000 (20:29 +0800)
To return -EINPROGRESS on success in padata_do_parallel was
considered to be odd. This patch changes this to return zero
on success. Also the only user of padata, pcrypt is adapted to
convert a return of zero to -EINPROGRESS within the crypto layer.
This also removes the pcrypt fallback if padata_do_parallel
was called on a not running padata instance as we can't handle it
anymore. This fallback was unused, so it's save to remove it.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/pcrypt.c
kernel/padata.c

index 71ae2b2ae33b1aa4df21a5c5edf3281445974749..6036b6de907929b701a8de692c3f7823213dd7fb 100644 (file)
@@ -143,10 +143,8 @@ static int pcrypt_aead_encrypt(struct aead_request *req)
        aead_request_set_assoc(creq, req->assoc, req->assoclen);
 
        err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_enc_padata);
-       if (err)
-               return err;
-       else
-               err = crypto_aead_encrypt(creq);
+       if (!err)
+               return -EINPROGRESS;
 
        return err;
 }
@@ -187,10 +185,8 @@ static int pcrypt_aead_decrypt(struct aead_request *req)
        aead_request_set_assoc(creq, req->assoc, req->assoclen);
 
        err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_dec_padata);
-       if (err)
-               return err;
-       else
-               err = crypto_aead_decrypt(creq);
+       if (!err)
+               return -EINPROGRESS;
 
        return err;
 }
@@ -233,10 +229,8 @@ static int pcrypt_aead_givencrypt(struct aead_givcrypt_request *req)
        aead_givcrypt_set_giv(creq, req->giv, req->seq);
 
        err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_enc_padata);
-       if (err)
-               return err;
-       else
-               err = crypto_aead_givencrypt(creq);
+       if (!err)
+               return -EINPROGRESS;
 
        return err;
 }
index 57ec4eb5f2e3737050aaa97910ac4774d0cbb950..ae8defcf062263d197d40c863a0f3d535a8418f1 100644 (file)
@@ -111,10 +111,13 @@ int padata_do_parallel(struct padata_instance *pinst,
 
        pd = rcu_dereference(pinst->pd);
 
-       err = 0;
+       err = -EINVAL;
        if (!(pinst->flags & PADATA_INIT))
                goto out;
 
+       if (!cpumask_test_cpu(cb_cpu, pd->cpumask))
+               goto out;
+
        err =  -EBUSY;
        if ((pinst->flags & PADATA_RESET))
                goto out;
@@ -122,11 +125,7 @@ int padata_do_parallel(struct padata_instance *pinst,
        if (atomic_read(&pd->refcnt) >= MAX_OBJ_NUM)
                goto out;
 
-       err = -EINVAL;
-       if (!cpumask_test_cpu(cb_cpu, pd->cpumask))
-               goto out;
-
-       err = -EINPROGRESS;
+       err = 0;
        atomic_inc(&pd->refcnt);
        padata->pd = pd;
        padata->cb_cpu = cb_cpu;