Chao Yu
46085f37fc
f2fs: fix to set/clear I_LINKABLE under i_lock
...
fsstress + fault injection test case reports a warning message as
below:
WARNING: CPU: 13 PID: 6226 at fs/inode.c:361 inc_nlink+0x32/0x40
Call Trace:
f2fs_init_inode_metadata+0x25c/0x4a0 [f2fs]
f2fs_add_inline_entry+0x153/0x3b0 [f2fs]
f2fs_add_dentry+0x75/0x80 [f2fs]
f2fs_do_add_link+0x108/0x160 [f2fs]
f2fs_rename2+0x6ab/0x14f0 [f2fs]
vfs_rename+0x70c/0x940
do_renameat2+0x4d8/0x4f0
__x64_sys_renameat2+0x4b/0x60
do_syscall_64+0x33/0x80
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Following race case can cause this:
Thread A Kworker
- f2fs_rename
- f2fs_create_whiteout
- __f2fs_tmpfile
- f2fs_i_links_write
- f2fs_mark_inode_dirty_sync
- mark_inode_dirty_sync
- writeback_single_inode
- __writeback_single_inode
- spin_lock(&inode->i_lock)
- inode->i_state |= I_LINKABLE
- inode->i_state &= ~dirty
- spin_unlock(&inode->i_lock)
- f2fs_add_link
- f2fs_do_add_link
- f2fs_add_dentry
- f2fs_add_inline_entry
- f2fs_init_inode_metadata
- f2fs_i_links_write
- inc_nlink
- WARN_ON(!(inode->i_state & I_LINKABLE))
Fix to add i_lock to avoid i_state update race condition.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2021-01-27 15:20:05 -08:00
..
2021-01-27 15:20:00 -08:00
2020-05-08 06:55:55 -07:00
2020-12-17 11:18:00 -08:00
2021-01-27 15:20:04 -08:00
2020-12-10 09:13:53 -08:00
2021-01-27 15:20:04 -08:00
2020-12-03 00:59:26 -08:00
2020-12-17 11:18:00 -08:00
2020-09-10 14:03:30 -07:00
2021-01-27 15:20:04 -08:00
2021-01-27 15:20:04 -08:00
2021-01-27 15:20:03 -08:00
2020-09-11 11:11:15 -07:00
2020-12-02 22:00:21 -08:00
2020-12-08 14:25:41 -08:00
2020-12-02 22:00:22 -08:00
2021-01-27 15:20:02 -08:00
2020-01-17 16:48:07 -08:00
2021-01-27 15:20:05 -08:00
2021-01-27 15:20:00 -08:00
2020-12-03 00:59:26 -08:00
2020-12-02 22:00:21 -08:00
2020-12-03 00:11:57 -08:00
2021-01-27 15:19:59 -08:00
2020-12-03 00:59:26 -08:00
2021-01-27 15:20:02 -08:00
2021-01-27 15:20:02 -08:00
2019-03-05 19:58:06 -08:00
2020-05-08 06:55:55 -07:00
2020-10-16 11:11:16 -07:00
2021-01-27 15:20:00 -08:00
2020-05-26 18:56:10 -07:00