|
@@ -65,11 +65,6 @@ static void crypto_scomp_show(struct seq_file *m, struct crypto_alg *alg)
|
|
|
seq_puts(m, "type : scomp\n");
|
|
|
}
|
|
|
|
|
|
-static int crypto_scomp_init_tfm(struct crypto_tfm *tfm)
|
|
|
-{
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static void crypto_scomp_free_scratches(void * __percpu *scratches)
|
|
|
{
|
|
|
int i;
|
|
@@ -134,6 +129,17 @@ static int crypto_scomp_alloc_all_scratches(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int crypto_scomp_init_tfm(struct crypto_tfm *tfm)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ mutex_lock(&scomp_lock);
|
|
|
+ ret = crypto_scomp_alloc_all_scratches();
|
|
|
+ mutex_unlock(&scomp_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static void crypto_scomp_sg_free(struct scatterlist *sgl)
|
|
|
{
|
|
|
int i, n;
|
|
@@ -241,6 +247,10 @@ static void crypto_exit_scomp_ops_async(struct crypto_tfm *tfm)
|
|
|
struct crypto_scomp **ctx = crypto_tfm_ctx(tfm);
|
|
|
|
|
|
crypto_free_scomp(*ctx);
|
|
|
+
|
|
|
+ mutex_lock(&scomp_lock);
|
|
|
+ crypto_scomp_free_all_scratches();
|
|
|
+ mutex_unlock(&scomp_lock);
|
|
|
}
|
|
|
|
|
|
int crypto_init_scomp_ops_async(struct crypto_tfm *tfm)
|
|
@@ -317,40 +327,18 @@ static const struct crypto_type crypto_scomp_type = {
|
|
|
int crypto_register_scomp(struct scomp_alg *alg)
|
|
|
{
|
|
|
struct crypto_alg *base = &alg->base;
|
|
|
- int ret = -ENOMEM;
|
|
|
-
|
|
|
- mutex_lock(&scomp_lock);
|
|
|
- if (crypto_scomp_alloc_all_scratches())
|
|
|
- goto error;
|
|
|
|
|
|
base->cra_type = &crypto_scomp_type;
|
|
|
base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK;
|
|
|
base->cra_flags |= CRYPTO_ALG_TYPE_SCOMPRESS;
|
|
|
|
|
|
- ret = crypto_register_alg(base);
|
|
|
- if (ret)
|
|
|
- goto error;
|
|
|
-
|
|
|
- mutex_unlock(&scomp_lock);
|
|
|
- return ret;
|
|
|
-
|
|
|
-error:
|
|
|
- crypto_scomp_free_all_scratches();
|
|
|
- mutex_unlock(&scomp_lock);
|
|
|
- return ret;
|
|
|
+ return crypto_register_alg(base);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(crypto_register_scomp);
|
|
|
|
|
|
int crypto_unregister_scomp(struct scomp_alg *alg)
|
|
|
{
|
|
|
- int ret;
|
|
|
-
|
|
|
- mutex_lock(&scomp_lock);
|
|
|
- ret = crypto_unregister_alg(&alg->base);
|
|
|
- crypto_scomp_free_all_scratches();
|
|
|
- mutex_unlock(&scomp_lock);
|
|
|
-
|
|
|
- return ret;
|
|
|
+ return crypto_unregister_alg(&alg->base);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(crypto_unregister_scomp);
|
|
|
|