nfsd: Use shash
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 24 Jan 2016 13:20:02 +0000 (21:20 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 27 Jan 2016 12:36:13 +0000 (20:36 +0800)
This patch replaces uses of the long obsolete hash interface with
shash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
fs/nfsd/nfs4recover.c

index dc8ebecf561866a2d6fcee729813528852be6313..195fe2668207a2bdaf689c8e93296503facec806 100644 (file)
 *
 */
 
+#include <crypto/hash.h>
 #include <linux/file.h>
 #include <linux/slab.h>
 #include <linux/namei.h>
-#include <linux/crypto.h>
 #include <linux/sched.h>
 #include <linux/fs.h>
 #include <linux/module.h>
@@ -104,29 +104,35 @@ static int
 nfs4_make_rec_clidname(char *dname, const struct xdr_netobj *clname)
 {
        struct xdr_netobj cksum;
-       struct hash_desc desc;
-       struct scatterlist sg;
+       struct crypto_shash *tfm;
        int status;
 
        dprintk("NFSD: nfs4_make_rec_clidname for %.*s\n",
                        clname->len, clname->data);
-       desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
-       desc.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
-       if (IS_ERR(desc.tfm)) {
-               status = PTR_ERR(desc.tfm);
+       tfm = crypto_alloc_shash("md5", 0, 0);
+       if (IS_ERR(tfm)) {
+               status = PTR_ERR(tfm);
                goto out_no_tfm;
        }
 
-       cksum.len = crypto_hash_digestsize(desc.tfm);
+       cksum.len = crypto_shash_digestsize(tfm);
        cksum.data = kmalloc(cksum.len, GFP_KERNEL);
        if (cksum.data == NULL) {
                status = -ENOMEM;
                goto out;
        }
 
-       sg_init_one(&sg, clname->data, clname->len);
+       {
+               SHASH_DESC_ON_STACK(desc, tfm);
+
+               desc->tfm = tfm;
+               desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
+
+               status = crypto_shash_digest(desc, clname->data, clname->len,
+                                            cksum.data);
+               shash_desc_zero(desc);
+       }
 
-       status = crypto_hash_digest(&desc, &sg, sg.length, cksum.data);
        if (status)
                goto out;
 
@@ -135,7 +141,7 @@ nfs4_make_rec_clidname(char *dname, const struct xdr_netobj *clname)
        status = 0;
 out:
        kfree(cksum.data);
-       crypto_free_hash(desc.tfm);
+       crypto_free_shash(tfm);
 out_no_tfm:
        return status;
 }