]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ecryptfs/crypto.c
eCryptfs: Collapse crypt_page_offset() into crypt_extent()
[karo-tx-linux.git] / fs / ecryptfs / crypto.c
index 9845d2fd250692f52a282e65e270d277532e5e61..9947388ccd8d25bb459cc2d547154e1a2ce63b60 100644 (file)
 #define DECRYPT                0
 #define ENCRYPT                1
 
-static int crypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
-                            struct page *dst_page, struct page *src_page,
-                            int offset, int size, unsigned char *iv, int op);
-
 /**
  * ecryptfs_to_hex
  * @dst: Buffer to take hex character representation of contents of
@@ -436,10 +432,11 @@ static int crypt_extent(struct page *dst_page,
        pgoff_t page_index = op == ENCRYPT ? src_page->index : dst_page->index;
        loff_t extent_base;
        char extent_iv[ECRYPTFS_MAX_IV_BYTES];
+       struct scatterlist src_sg, dst_sg;
+       size_t extent_size = crypt_stat->extent_size;
        int rc;
 
-       extent_base = (((loff_t)page_index)
-                      * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
+       extent_base = (((loff_t)page_index) * (PAGE_CACHE_SIZE / extent_size));
        rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
                                (extent_base + extent_offset));
        if (rc) {
@@ -448,9 +445,17 @@ static int crypt_extent(struct page *dst_page,
                        (unsigned long long)(extent_base + extent_offset), rc);
                goto out;
        }
-       rc = crypt_page_offset(crypt_stat, dst_page, src_page,
-                              (extent_offset * crypt_stat->extent_size),
-                              crypt_stat->extent_size, extent_iv, op);
+
+       sg_init_table(&src_sg, 1);
+       sg_init_table(&dst_sg, 1);
+
+       sg_set_page(&src_sg, src_page, extent_size,
+                   extent_offset * extent_size);
+       sg_set_page(&dst_sg, dst_page, extent_size,
+                   extent_offset * extent_size);
+
+       rc = crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, extent_size,
+                              extent_iv, op);
        if (rc < 0) {
                printk(KERN_ERR "%s: Error attempting to crypt page with "
                       "page_index = [%ld], extent_offset = [%ld]; "
@@ -588,33 +593,6 @@ out:
        return rc;
 }
 
-/**
- * crypt_page_offset
- * @crypt_stat: The cryptographic context
- * @dst_page: The page to write the result into
- * @src_page: The page to read from
- * @offset: The byte offset into the dst_page and src_page
- * @size: The number of bytes of data
- * @iv: The initialization vector to use for the crypto operation
- * @op: ENCRYPT or DECRYPT to indicate the desired operation
- *
- * Returns the number of bytes encrypted or decrypted
- */
-static int crypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
-                            struct page *dst_page, struct page *src_page,
-                            int offset, int size, unsigned char *iv, int op)
-{
-       struct scatterlist src_sg, dst_sg;
-
-       sg_init_table(&src_sg, 1);
-       sg_init_table(&dst_sg, 1);
-
-       sg_set_page(&src_sg, src_page, size, offset);
-       sg_set_page(&dst_sg, dst_page, size, offset);
-
-       return crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv, op);
-}
-
 #define ECRYPTFS_MAX_SCATTERLIST_LEN 4
 
 /**