linux-stable/fs/f2fs
Zhang Qilong 2c7772b3f2 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:17:08 +02:00
..
acl.c f2fs: fix wrong return value of f2fs_acl_create 2019-02-12 19:46:00 +01:00
acl.h
checkpoint.c f2fs: fix to check segment boundary during SIT page readahead 2020-11-05 11:06:53 +01:00
data.c f2fs: fix potential overflow 2020-01-17 19:45:52 +01:00
debug.c f2fs: show available_nids in f2fs/status 2017-05-03 10:04:57 -07:00
dir.c f2fs: check if file namelen exceeds max value 2020-08-05 10:06:49 +02:00
extent_cache.c f2fs: fix race condition on setting FI_NO_EXTENT flag 2022-10-26 13:17:08 +02:00
f2fs.h f2fs: use generic EFSBADCRC/EFSCORRUPTED 2019-10-05 12:47:39 +02:00
file.c f2fs: fix out-of-repair __setattr_copy() 2021-03-03 18:22:55 +01:00
gc.c f2fs: fix to allow node segment for GC by ioctl path 2019-12-17 20:38:12 +01:00
gc.h f2fs: fix potential overflow when adjusting GC cycle 2017-08-15 10:40:14 -07:00
hash.c f2fs: check entire encrypted bigname when finding a dentry 2017-05-04 11:44:35 -04:00
inline.c f2fs: fix a redundant call to f2fs_balance_fs if an error occurs 2021-05-22 10:57:38 +02:00
inode.c f2fs: use generic EFSBADCRC/EFSCORRUPTED 2019-10-05 12:47:39 +02:00
Kconfig
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
namei.c fscrypt: return -EXDEV for incompatible rename or link into encrypted dir 2020-11-05 11:06:52 +01:00
node.c f2fs: fix indefinite loop scanning for free nid 2020-09-23 10:46:34 +02:00
node.h f2fs: simplify the way of calulating next nat address 2017-07-04 02:11:34 -07:00
recovery.c f2fs: mark inode dirty explicitly in recover_inode() 2019-11-20 18:00:45 +01:00
segment.c f2fs: fix potential overflow 2021-09-22 11:45:15 +02:00
segment.h f2fs: handle unallocated section and zone on pinned/atgc 2021-03-07 11:27:45 +01:00
shrinker.c f2fs: fix sbi->extent_list corruption issue 2019-02-12 19:46:08 +01:00
super.c f2fs: add MODULE_SOFTDEP to ensure crc32 is included in the initramfs 2021-07-20 16:17:53 +02:00
sysfs.c f2fs: wait for sysfs kobject removal before freeing f2fs_sb_info 2020-10-29 09:07:10 +01:00
trace.c f2fs: do not use mutex lock in atomic context 2019-04-05 22:31:27 +02:00
trace.h
xattr.c f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr() 2021-12-29 12:17:36 +01:00
xattr.h f2fs: fix to avoid accessing xattr across the boundary 2020-05-20 08:17:04 +02:00