forked from luck/tmp_suning_uos_patched
gfs2: Improve mmap write vs. truncate consistency
On filesystems with a block size smaller than PAGE_SIZE, page_mkwrite is called for each memory-mapped page before that page can be written to. When such a memory-mapped file is truncated down to size x which is not a multiple of the page size and then back to a larger size, the page straddling size x can end up with a partial block mapping. In that case, make sure to mark that page read-only so that page_mkwrite will be called before the page can be written to the next time. (There is no point in marking the page straddling size x read-only when truncating down as writing to memory beyond the end of the file will result in SIGBUS instead of growing the file.) Fixes xfstests generic/029, generic/030 on filesystems with a block size smaller than PAGE_SIZE. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
ad26967b9a
commit
b473bc2dcd
|
@ -2139,7 +2139,7 @@ static int do_grow(struct inode *inode, u64 size)
|
|||
if (error)
|
||||
goto do_end_trans;
|
||||
|
||||
i_size_write(inode, size);
|
||||
truncate_setsize(inode, size);
|
||||
ip->i_inode.i_mtime = ip->i_inode.i_ctime = current_time(&ip->i_inode);
|
||||
gfs2_trans_add_meta(ip->i_gl, dibh);
|
||||
gfs2_dinode_out(ip, dibh->b_data);
|
||||
|
|
Loading…
Reference in New Issue
Block a user