cifs: Change the I/O paths to use an iterator rather than a page list
[sfrench/cifs-2.6.git] / fs / cifs / cifsencrypt.c
index 7be589aeb520c4ca4acb8ce47b9b5d0fc7bf213f..357bd27a7fd15b390fc3142a1735c31c266e22b6 100644 (file)
@@ -169,11 +169,11 @@ static int cifs_shash_iter(const struct iov_iter *iter, size_t maxsize,
 }
 
 int __cifs_calc_signature(struct smb_rqst *rqst,
-                       struct TCP_Server_Info *server, char *signature,
-                       struct shash_desc *shash)
+                         struct TCP_Server_Info *server, char *signature,
+                         struct shash_desc *shash)
 {
        int i;
-       int rc;
+       ssize_t rc;
        struct kvec *iov = rqst->rq_iov;
        int n_vec = rqst->rq_nvec;
 
@@ -205,25 +205,9 @@ int __cifs_calc_signature(struct smb_rqst *rqst,
                }
        }
 
-       /* now hash over the rq_pages array */
-       for (i = 0; i < rqst->rq_npages; i++) {
-               void *kaddr;
-               unsigned int len, offset;
-
-               rqst_page_get_length(rqst, i, &len, &offset);
-
-               kaddr = (char *) kmap(rqst->rq_pages[i]) + offset;
-
-               rc = crypto_shash_update(shash, kaddr, len);
-               if (rc) {
-                       cifs_dbg(VFS, "%s: Could not update with payload\n",
-                                __func__);
-                       kunmap(rqst->rq_pages[i]);
-                       return rc;
-               }
-
-               kunmap(rqst->rq_pages[i]);
-       }
+       rc = cifs_shash_iter(&rqst->rq_iter, iov_iter_count(&rqst->rq_iter), shash);
+       if (rc < 0)
+               return rc;
 
        rc = crypto_shash_final(shash, signature);
        if (rc)