mirror of
https://github.com/joel16/android_kernel_sony_msm8994_rework.git
synced 2025-01-14 21:18:40 +00:00
ecryptfs: remove unnecessary decrypt when extending a file
Removes an unecessary page decrypt from ecryptfs_begin_write when the page is beyond the current file size. Previously, the call to ecryptfs_decrypt_page would result in a read of 0 bytes, but still attempt to decrypt an entire page. This patch detects that case and merely zeros the page before marking it up-to-date. Signed-off-by: Frank Swiderski <fes@chromium.org> Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
This commit is contained in:
parent
f24b38874e
commit
24562486be
@ -290,6 +290,7 @@ static int ecryptfs_write_begin(struct file *file,
|
||||
return -ENOMEM;
|
||||
*pagep = page;
|
||||
|
||||
prev_page_end_size = ((loff_t)index << PAGE_CACHE_SHIFT);
|
||||
if (!PageUptodate(page)) {
|
||||
struct ecryptfs_crypt_stat *crypt_stat =
|
||||
&ecryptfs_inode_to_private(mapping->host)->crypt_stat;
|
||||
@ -335,18 +336,23 @@ static int ecryptfs_write_begin(struct file *file,
|
||||
SetPageUptodate(page);
|
||||
}
|
||||
} else {
|
||||
rc = ecryptfs_decrypt_page(page);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error decrypting page "
|
||||
"at index [%ld]; rc = [%d]\n",
|
||||
__func__, page->index, rc);
|
||||
ClearPageUptodate(page);
|
||||
goto out;
|
||||
if (prev_page_end_size
|
||||
>= i_size_read(page->mapping->host)) {
|
||||
zero_user(page, 0, PAGE_CACHE_SIZE);
|
||||
} else {
|
||||
rc = ecryptfs_decrypt_page(page);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error decrypting "
|
||||
"page at index [%ld]; "
|
||||
"rc = [%d]\n",
|
||||
__func__, page->index, rc);
|
||||
ClearPageUptodate(page);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
SetPageUptodate(page);
|
||||
}
|
||||
}
|
||||
prev_page_end_size = ((loff_t)index << PAGE_CACHE_SHIFT);
|
||||
/* If creating a page or more of holes, zero them out via truncate.
|
||||
* Note, this will increase i_size. */
|
||||
if (index != 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user