OSDN Git Service

f2fs: dax: fix races between page faults and truncating pages
authorQiuyang Sun <sunqiuyang@huawei.com>
Thu, 18 May 2017 03:06:45 +0000 (11:06 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 13 Jul 2017 23:56:34 +0000 (16:56 -0700)
commit11de19dfa757695700c28278ff1f0a289c036a9e
tree36f95dc3cc9a6194abaf16b86aa460a3d8b418e6
parent9ddde7dfd1c9446a26224353393d145c60426093
f2fs: dax: fix races between page faults and truncating pages

Currently in F2FS, page faults and operations that truncate the pagecahe
or data blocks, are completely unsynchronized. This can result in page
fault faulting in a page into a range that we are changing after
truncating, and thus we can end up with a page mapped to disk blocks that
will be shortly freed. Filesystem corruption will shortly follow.

This patch fixes the problem by creating new rw semaphore i_mmap_sem in
f2fs_inode_info and grab it for functions removing blocks from extent tree
and for read over page faults. The mechanism is similar to that in ext4.

Signed-off-by: Qiuyang Sun <sunqiuyang@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
 Conflicts:
fs/f2fs/file.c
fs/f2fs/data.c
fs/f2fs/f2fs.h
fs/f2fs/file.c
fs/f2fs/super.c