diff options
Diffstat (limited to 'fs/ecryptfs')
| -rw-r--r-- | fs/ecryptfs/crypto.c | 2 | ||||
| -rw-r--r-- | fs/ecryptfs/kthread.c | 6 | ||||
| -rw-r--r-- | fs/ecryptfs/mmap.c | 12 | 
3 files changed, 14 insertions, 6 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index ea993128155..a7b0c2dfb3d 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c @@ -1935,7 +1935,7 @@ static const unsigned char filename_rev_map[256] = {   * @src: Source location for the filename to encode   * @src_size: Size of the source in bytes   */ -void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size, +static void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size,  				  unsigned char *src, size_t src_size)  {  	size_t num_blocks; diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c index 809e67d05ca..f1ea610362c 100644 --- a/fs/ecryptfs/kthread.c +++ b/fs/ecryptfs/kthread.c @@ -102,12 +102,12 @@ int __init ecryptfs_init_kthread(void)  void ecryptfs_destroy_kthread(void)  { -	struct ecryptfs_open_req *req; +	struct ecryptfs_open_req *req, *tmp;  	mutex_lock(&ecryptfs_kthread_ctl.mux);  	ecryptfs_kthread_ctl.flags |= ECRYPTFS_KTHREAD_ZOMBIE; -	list_for_each_entry(req, &ecryptfs_kthread_ctl.req_list, -			    kthread_ctl_list) { +	list_for_each_entry_safe(req, tmp, &ecryptfs_kthread_ctl.req_list, +				 kthread_ctl_list) {  		list_del(&req->kthread_ctl_list);  		*req->lower_file = ERR_PTR(-EIO);  		complete(&req->done); 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) {  |