diff options
Diffstat (limited to 'fs/ecryptfs/mmap.c')
| -rw-r--r-- | fs/ecryptfs/mmap.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index bd1d57f98f7..564a1fa34b9 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c @@ -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) {  |