| Index: fs/ecryptfs/mmap.c
|
| diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
|
| index 1887e7da194c97a364c96d61cbb713087417be0b..7c7ceba1ef470956eacf9d23cfce01f0a94e5aaf 100644
|
| --- a/fs/ecryptfs/mmap.c
|
| +++ b/fs/ecryptfs/mmap.c
|
| @@ -69,18 +69,6 @@ static int ecryptfs_writepage(struct page *page, struct writeback_control *wbc)
|
| {
|
| int rc;
|
|
|
| - /*
|
| - * Refuse to write the page out if we are called from reclaim context
|
| - * since our writepage() path may potentially allocate memory when
|
| - * calling into the lower fs vfs_write() which may in turn invoke
|
| - * us again.
|
| - */
|
| - if (current->flags & PF_MEMALLOC) {
|
| - redirty_page_for_writepage(wbc, page);
|
| - rc = 0;
|
| - goto out;
|
| - }
|
| -
|
| rc = ecryptfs_encrypt_page(page);
|
| if (rc) {
|
| ecryptfs_printk(KERN_WARNING, "Error encrypting "
|
| @@ -89,8 +77,8 @@ static int ecryptfs_writepage(struct page *page, struct writeback_control *wbc)
|
| goto out;
|
| }
|
| SetPageUptodate(page);
|
| -out:
|
| unlock_page(page);
|
| +out:
|
| return rc;
|
| }
|
|
|
| @@ -502,7 +490,6 @@ static int ecryptfs_write_end(struct file *file,
|
| struct ecryptfs_crypt_stat *crypt_stat =
|
| &ecryptfs_inode_to_private(file->f_path.dentry->d_inode)->crypt_stat;
|
| int rc;
|
| - int need_unlock_page = 1;
|
|
|
| if (crypt_stat->flags & ECRYPTFS_NEW_FILE) {
|
| ecryptfs_printk(KERN_DEBUG, "ECRYPTFS_NEW_FILE flag set in "
|
| @@ -529,25 +516,25 @@ static int ecryptfs_write_end(struct file *file,
|
| "zeros in page with index = [0x%.16x]\n", index);
|
| goto out;
|
| }
|
| - set_page_dirty(page);
|
| - unlock_page(page);
|
| - need_unlock_page = 0;
|
| + rc = ecryptfs_encrypt_page(page);
|
| + if (rc) {
|
| + ecryptfs_printk(KERN_WARNING, "Error encrypting page (upper "
|
| + "index [0x%.16x])\n", index);
|
| + goto out;
|
| + }
|
| if (pos + copied > i_size_read(ecryptfs_inode)) {
|
| i_size_write(ecryptfs_inode, pos + copied);
|
| ecryptfs_printk(KERN_DEBUG, "Expanded file size to "
|
| "[0x%.16x]\n", i_size_read(ecryptfs_inode));
|
| - balance_dirty_pages_ratelimited(mapping);
|
| - rc = ecryptfs_write_inode_size_to_metadata(ecryptfs_inode);
|
| - if (rc) {
|
| - printk(KERN_ERR "Error writing inode size to metadata; "
|
| - "rc = [%d]\n", rc);
|
| - goto out;
|
| - }
|
| }
|
| - rc = copied;
|
| + rc = ecryptfs_write_inode_size_to_metadata(ecryptfs_inode);
|
| + if (rc)
|
| + printk(KERN_ERR "Error writing inode size to metadata; "
|
| + "rc = [%d]\n", rc);
|
| + else
|
| + rc = copied;
|
| out:
|
| - if (need_unlock_page)
|
| - unlock_page(page);
|
| + unlock_page(page);
|
| page_cache_release(page);
|
| return rc;
|
| }
|
|
|