Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[powerpc.git] / fs / ecryptfs / mmap.c
index 6df410c..fd3f94d 100644 (file)
@@ -409,8 +409,7 @@ static int ecryptfs_prepare_write(struct file *file, struct page *page,
        if (!PageUptodate(page))
                rc = ecryptfs_do_readpage(file, page, page->index);
        if (page->index != 0) {
-               loff_t end_of_prev_pg_pos =
-                       (((loff_t)page->index << PAGE_CACHE_SHIFT) - 1);
+               loff_t end_of_prev_pg_pos = page_offset(page) - 1;
 
                if (end_of_prev_pg_pos > i_size_read(page->mapping->host)) {
                        rc = ecryptfs_truncate(file->f_path.dentry,
@@ -422,6 +421,8 @@ static int ecryptfs_prepare_write(struct file *file, struct page *page,
                                goto out;
                        }
                }
+               if (end_of_prev_pg_pos + 1 > i_size_read(page->mapping->host))
+                       zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
        }
 out:
        return rc;
@@ -734,7 +735,7 @@ static int ecryptfs_commit_write(struct file *file, struct page *page,
                goto out;
        }
        inode->i_blocks = lower_inode->i_blocks;
-       pos = (page->index << PAGE_CACHE_SHIFT) + to;
+       pos = page_offset(page) + to;
        if (pos > i_size_read(inode)) {
                i_size_write(inode, pos);
                ecryptfs_printk(KERN_DEBUG, "Expanded file size to "
@@ -833,7 +834,8 @@ static void ecryptfs_sync_page(struct page *page)
                ecryptfs_printk(KERN_DEBUG, "find_lock_page failed\n");
                return;
        }
-       lower_page->mapping->a_ops->sync_page(lower_page);
+       if (lower_page->mapping->a_ops->sync_page)
+               lower_page->mapping->a_ops->sync_page(lower_page);
        ecryptfs_printk(KERN_DEBUG, "Unlocking page with index = [0x%.16x]\n",
                        lower_page->index);
        unlock_page(lower_page);