linux-stable/fs/f2fs
Zhang Qilong c5ed3a3789 f2fs: fix race condition on setting FI_NO_EXTENT flag
[ Upstream commit 07725adc55 ]

The following scenarios exist.
process A:               process B:
->f2fs_drop_extent_tree  ->f2fs_update_extent_cache_range
                          ->f2fs_update_extent_tree_range
                           ->write_lock
 ->set_inode_flag
                           ->is_inode_flag_set
                           ->__free_extent_tree // Shouldn't
                                                // have been
                                                // cleaned up
                                                // here
  ->write_lock

In this case, the "FI_NO_EXTENT" flag is set between
f2fs_update_extent_tree_range and is_inode_flag_set
by other process. it leads to clearing the whole exten
tree which should not have happened. And we fix it by
move the setting it to the range of write_lock.

Fixes:5f281fab9b9a3 ("f2fs: disable extent_cache for fcollapse/finsert inodes")
Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-10-26 13:22:46 +02:00
..
acl.c f2fs: Replace spaces with tab 2019-05-08 21:23:11 -07:00
acl.h
checkpoint.c f2fs: fix to do sanity check on destination blkaddr during recovery 2022-10-26 13:22:17 +02:00
data.c f2fs: fix to avoid potential deadlock 2022-04-15 14:18:06 +02:00
debug.c f2fs: avoid race condition for shrinker count 2021-01-06 14:48:40 +01:00
dir.c f2fs: reduce the scope of setting fsck tag when de->name_len is zero 2021-09-22 12:26:23 +02:00
extent_cache.c f2fs: fix race condition on setting FI_NO_EXTENT flag 2022-10-26 13:22:46 +02:00
f2fs.h f2fs: fix to do sanity check on destination blkaddr during recovery 2022-10-26 13:22:17 +02:00
file.c f2fs: fix fallocate to use file_modified to update permissions consistently 2022-06-14 18:11:44 +02:00
gc.c f2fs: fix to do sanity check on summary info 2022-10-26 13:22:17 +02:00
gc.h
hash.c f2fs: Support case-insensitive file name lookups 2019-08-23 07:57:13 -07:00
inline.c f2fs: fix a redundant call to f2fs_balance_fs if an error occurs 2021-05-19 10:08:25 +02:00
inode.c f2fs: fix to clear dirty inode in f2fs_evict_inode() 2022-06-14 18:11:44 +02:00
Kconfig f2fs: Add a small clarification to CONFIG_FS_F2FS_FS_SECURITY 2019-09-16 08:38:48 -07:00
Makefile f2fs: add fs-verity support 2019-08-12 19:33:51 -07:00
namei.c f2fs: should use GFP_NOFS for directory inodes 2021-11-17 09:48:49 +01:00
node.c f2fs: fix to avoid use f2fs_bug_on() in f2fs_new_node_page() 2022-08-25 11:18:38 +02:00
node.h f2fs: avoid race condition for shrinker count 2021-01-06 14:48:40 +01:00
recovery.c f2fs: fix to do sanity check on summary info 2022-10-26 13:22:17 +02:00
segment.c f2fs: fix dereference of stale list iterator after loop body 2022-06-14 18:11:42 +02:00
segment.h f2fs: fix deadloop in foreground GC 2022-06-14 18:11:44 +02:00
shrinker.c f2fs: avoid race condition for shrinker count 2021-01-06 14:48:40 +01:00
super.c f2fs: increase the limit for reserve_root 2022-10-26 13:22:17 +02:00
sysfs.c f2fs: fix to reserve space for IO align feature 2022-01-27 09:19:53 +01:00
trace.c f2fs: do not use mutex lock in atomic context 2019-03-05 19:58:06 -08:00
trace.h
verity.c f2fs: fix error handling in f2fs_end_enable_verity() 2021-05-19 10:08:32 +02:00
xattr.c f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr() 2021-12-29 12:23:37 +01:00
xattr.h f2fs: add fs-verity support 2019-08-12 19:33:51 -07:00