fs: ecryptfs: Use crypto_wait_req
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 6 Feb 2023 10:22:17 +0000 (18:22 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 13 Feb 2023 10:34:48 +0000 (18:34 +0800)
This patch replaces the custom crypto completion function with
crypto_req_done.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Acked-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
fs/ecryptfs/crypto.c

index e3f5d7f..c305753 100644 (file)
@@ -260,22 +260,6 @@ int virt_to_scatterlist(const void *addr, int size, struct scatterlist *sg,
        return i;
 }
 
-struct extent_crypt_result {
-       struct completion completion;
-       int rc;
-};
-
-static void extent_crypt_complete(struct crypto_async_request *req, int rc)
-{
-       struct extent_crypt_result *ecr = req->data;
-
-       if (rc == -EINPROGRESS)
-               return;
-
-       ecr->rc = rc;
-       complete(&ecr->completion);
-}
-
 /**
  * crypt_scatterlist
  * @crypt_stat: Pointer to the crypt_stat struct to initialize.
@@ -293,7 +277,7 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
                             unsigned char *iv, int op)
 {
        struct skcipher_request *req = NULL;
-       struct extent_crypt_result ecr;
+       DECLARE_CRYPTO_WAIT(ecr);
        int rc = 0;
 
        if (unlikely(ecryptfs_verbosity > 0)) {
@@ -303,8 +287,6 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
                                  crypt_stat->key_size);
        }
 
-       init_completion(&ecr.completion);
-
        mutex_lock(&crypt_stat->cs_tfm_mutex);
        req = skcipher_request_alloc(crypt_stat->tfm, GFP_NOFS);
        if (!req) {
@@ -315,7 +297,7 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
 
        skcipher_request_set_callback(req,
                        CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
-                       extent_crypt_complete, &ecr);
+                       crypto_req_done, &ecr);
        /* Consider doing this once, when the file is opened */
        if (!(crypt_stat->flags & ECRYPTFS_KEY_SET)) {
                rc = crypto_skcipher_setkey(crypt_stat->tfm, crypt_stat->key,
@@ -334,13 +316,7 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
        skcipher_request_set_crypt(req, src_sg, dst_sg, size, iv);
        rc = op == ENCRYPT ? crypto_skcipher_encrypt(req) :
                             crypto_skcipher_decrypt(req);
-       if (rc == -EINPROGRESS || rc == -EBUSY) {
-               struct extent_crypt_result *ecr = req->base.data;
-
-               wait_for_completion(&ecr->completion);
-               rc = ecr->rc;
-               reinit_completion(&ecr->completion);
-       }
+       rc = crypto_wait_req(rc, &ecr);
 out:
        skcipher_request_free(req);
        return rc;