|
@@ -338,7 +338,8 @@ static int ecryptfs_write_begin(struct file *file,
|
|
|
if (prev_page_end_size
|
|
|
>= i_size_read(page->mapping->host)) {
|
|
|
zero_user(page, 0, PAGE_CACHE_SIZE);
|
|
|
- } else {
|
|
|
+ SetPageUptodate(page);
|
|
|
+ } else if (len < PAGE_CACHE_SIZE) {
|
|
|
rc = ecryptfs_decrypt_page(page);
|
|
|
if (rc) {
|
|
|
printk(KERN_ERR "%s: Error decrypting "
|
|
@@ -348,8 +349,8 @@ static int ecryptfs_write_begin(struct file *file,
|
|
|
ClearPageUptodate(page);
|
|
|
goto out;
|
|
|
}
|
|
|
+ SetPageUptodate(page);
|
|
|
}
|
|
|
- SetPageUptodate(page);
|
|
|
}
|
|
|
}
|
|
|
/* If creating a page or more of holes, zero them out via truncate.
|
|
@@ -499,6 +500,13 @@ static int ecryptfs_write_end(struct file *file,
|
|
|
}
|
|
|
goto out;
|
|
|
}
|
|
|
+ if (!PageUptodate(page)) {
|
|
|
+ if (copied < PAGE_CACHE_SIZE) {
|
|
|
+ rc = 0;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ SetPageUptodate(page);
|
|
|
+ }
|
|
|
/* Fills in zeros if 'to' goes beyond inode size */
|
|
|
rc = fill_zeros_to_end_of_page(page, to);
|
|
|
if (rc) {
|