| From d6320cbfc92910a3e5f10c42d98c231c98db4f60 Mon Sep 17 00:00:00 2001 |
| From: Jan Kara <jack@suse.cz> |
| Date: Wed, 1 Oct 2014 21:49:46 -0400 |
| Subject: ext4: fix mmap data corruption when blocksize < pagesize |
| |
| From: Jan Kara <jack@suse.cz> |
| |
| commit d6320cbfc92910a3e5f10c42d98c231c98db4f60 upstream. |
| |
| Use truncate_isize_extended() when hole is being created in a file so that |
| ->page_mkwrite() will get called for the partial tail page if it is |
| mmaped (see the first patch in the series for details). |
| |
| Signed-off-by: Jan Kara <jack@suse.cz> |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/ext4/inode.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/fs/ext4/inode.c |
| +++ b/fs/ext4/inode.c |
| @@ -4536,8 +4536,12 @@ int ext4_setattr(struct dentry *dentry, |
| ext4_orphan_del(NULL, inode); |
| goto err_out; |
| } |
| - } else |
| + } else { |
| + loff_t oldsize = inode->i_size; |
| + |
| i_size_write(inode, attr->ia_size); |
| + pagecache_isize_extended(inode, oldsize, inode->i_size); |
| + } |
| |
| /* |
| * Blocks are going to be removed from the inode. Wait |