]> asedeno.scripts.mit.edu Git - linux.git/commit
gfs2: Improve mmap write vs. truncate consistency
authorAndreas Gruenbacher <agruenba@redhat.com>
Fri, 6 Sep 2019 10:02:38 +0000 (11:02 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 6 Sep 2019 20:54:23 +0000 (22:54 +0200)
commitb473bc2dcd5ad7c487f252d9d2b74ace70308b1f
treeb8c5b584423feb174c308cce5c51544cd95004b8
parentad26967b9afa7faee22c3b79370cb5d9ab553493
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>
fs/gfs2/bmap.c