linux_dsm_epyc7002/fs/f2fs
Yunlei He d40a43af0a f2fs: fix an infinite loop when flush nodes in cp
Thread A			Thread B

- write_checkpoint
 - block_operations
   -blk_start_plug
    -sync_node_pages		- f2fs_do_sync_file
				 - fsync_node_pages
				  - f2fs_wait_on_page_writeback

Thread A wait for global F2FS_DIRTY_NODES decreased to zero,
it start a plug list, some requests have been added to this list.
Thread B lock one dirty node page, and wait this page write back.
But this page has been in plug list of thread A with PG_writeback flag.
Thread A keep on running and its plug list has no chance to finish,
so it seems a deadlock between cp and fsync path.

This patch add a wait on page write back before set node page dirty
to avoid this problem.

Signed-off-by: Yunlei He <heyunlei@huawei.com>
Signed-off-by: Pengyang Hou <houpengyang@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2016-11-25 10:16:00 -08:00
..
acl.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
data.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
debug.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
dir.c f2fs: report error of f2fs_fill_dentries 2016-11-23 12:11:12 -08:00
extent_cache.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
f2fs.h f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
file.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
gc.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
gc.h f2fs: detect idle time depending on user behavior 2016-01-11 15:56:37 -08:00
hash.c f2fs: introduce dot and dotdot name check 2015-05-28 15:41:34 -07:00
inline.c f2fs: report error of f2fs_fill_dentries 2016-11-23 12:11:12 -08:00
inode.c f2fs: record inode updating status correctly 2016-11-23 12:11:25 -08:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile fs crypto: move per-file encryption from f2fs tree to fs/crypto 2016-03-17 21:19:33 -07:00
namei.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
node.c f2fs: fix an infinite loop when flush nodes in cp 2016-11-25 10:16:00 -08:00
node.h f2fs: split free nid list 2016-11-23 12:11:00 -08:00
recovery.c Revert "f2fs: do not recover from previous remained wrong dnodes" 2016-11-23 12:11:30 -08:00
segment.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
segment.h f2fs: use BIO_MAX_PAGES for bio allocation 2016-11-23 12:11:07 -08:00
shrinker.c f2fs: avoid casted negative value as shrink count 2016-11-23 12:11:03 -08:00
super.c f2fs: support multiple devices 2016-11-25 10:15:13 -08:00
trace.c f2fs: use bio op accessors 2016-06-07 13:41:38 -06:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
xattr.h f2fs: add missing argument to f2fs_setxattr stub 2016-03-17 21:19:47 -07:00