f2fs: fix to wait all node page writeback
authorChao Yu <yuchao0@huawei.com>
Fri, 14 Feb 2020 09:45:12 +0000 (17:45 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Apr 2020 08:36:42 +0000 (10:36 +0200)
commita156e67acf6c77f1c379448c7629c04113b6ee5c
tree3040ea21121cce86597fe857cfffcfd4475605a9
parentf08e4e70b0acec78574431f1eac10d273695f790
f2fs: fix to wait all node page writeback

[ Upstream commit dc5a941223edd803f476a153abd950cc3a83c3e1 ]

There is a race condition that we may miss to wait for all node pages
writeback, fix it.

- fsync() - shrink
 - f2fs_do_sync_file
 - __write_node_page
  - set_page_writeback(page#0)
  : remove DIRTY/TOWRITE flag
  - f2fs_fsync_node_pages
  : won't find page #0 as TOWRITE flag was removeD
  - f2fs_wait_on_node_pages_writeback
  : wont' wait page #0 writeback as it was not in fsync_node_list list.
   - f2fs_add_fsync_node_entry

Fixes: 50fa53eccf9f ("f2fs: fix to avoid broken of dnode block list")
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/f2fs/node.c