OpenCloudOS-Kernel/fs/f2fs
Chao Yu 39a8695824 f2fs: refactor ->page_mkwrite() flow
Thread A				Thread B
- f2fs_vm_page_mkwrite
					- f2fs_setattr
					 - down_write(i_mmap_sem)
					 - truncate_setsize
					 - f2fs_truncate
					 - up_write(i_mmap_sem)
 - f2fs_reserve_block
 reserve NEW_ADDR
 - skip dirty page due to truncation

1. we don't need to rserve new block address for a truncated page.
2. dn.data_blkaddr is used out of node page lock coverage.

Refactor ->page_mkwrite() flow to fix above issues:
- use __do_map_lock() to avoid racing checkpoint()
- lock data page in prior to dnode page
- cover f2fs_reserve_block with i_mmap_sem lock
- wait page writeback before zeroing page

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2018-09-30 18:41:22 -07:00
..
Kconfig fs/*/Kconfig: drop links to 404-compliant http://acl.bestbits.at 2018-01-01 12:45:37 -07:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
acl.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
acl.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
checkpoint.c Revert: "f2fs: check last page index in cached bio to decide submission" 2018-09-30 18:39:54 -07:00
data.c f2fs: refactor ->page_mkwrite() flow 2018-09-30 18:41:22 -07:00
debug.c f2fs: add to account skip count of background GC 2018-09-30 18:33:34 -07:00
dir.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
extent_cache.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
f2fs.h f2fs: refactor ->page_mkwrite() flow 2018-09-30 18:41:22 -07:00
file.c f2fs: refactor ->page_mkwrite() flow 2018-09-30 18:41:22 -07:00
gc.c f2fs: add to account skip count of background GC 2018-09-30 18:33:34 -07:00
gc.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
hash.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
inline.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
inode.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
namei.c f2fs: report ENOENT correctly in f2fs_rename 2018-09-26 12:38:11 -07:00
node.c Revert: "f2fs: check last page index in cached bio to decide submission" 2018-09-30 18:39:54 -07:00
node.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
recovery.c f2fs: avoid f2fs_bug_on if f2fs_get_meta_page_nofail got EIO 2018-09-28 10:39:58 -07:00
segment.c Revert: "f2fs: check last page index in cached bio to decide submission" 2018-09-30 18:39:54 -07:00
segment.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
shrinker.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
super.c f2fs: support superblock checksum 2018-09-30 18:34:18 -07:00
sysfs.c f2fs: support superblock checksum 2018-09-30 18:34:18 -07:00
trace.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
trace.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
xattr.c f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00
xattr.h f2fs: add SPDX license identifiers 2018-09-12 13:07:10 -07:00