linux-stable/fs/f2fs
Zhang Qilong 7534a90f67 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:15:45 +02: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
acl.c f2fs: fix wrong return value of f2fs_acl_create 2019-02-12 19:44:53 +01:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: fix to check segment boundary during SIT page readahead 2020-11-10 10:23:52 +01:00
data.c f2fs: fix potential overflow 2020-01-23 08:19:37 +01:00
debug.c f2fs: remove percpu_count due to performance regression 2017-01-12 11:39:35 +01:00
dir.c f2fs: check if file namelen exceeds max value 2020-08-21 11:01:48 +02:00
extent_cache.c f2fs: fix race condition on setting FI_NO_EXTENT flag 2022-10-26 13:15:45 +02:00
f2fs.h fscrypto: move ioctl processing more fully into common code 2020-11-10 10:23:51 +01:00
file.c f2fs: fix out-of-repair __setattr_copy() 2021-03-03 17:44:44 +01:00
gc.c f2fs: return correct errno in f2fs_gc 2019-11-25 09:53:18 +01:00
gc.h
hash.c f2fs: check entire encrypted bigname when finding a dentry 2017-05-25 15:44:38 +02:00
inline.c f2fs: fix a redundant call to f2fs_balance_fs if an error occurs 2021-05-22 10:40:30 +02:00
inode.c f2fs: fix to clear dirty inode in error path of f2fs_iget() 2019-06-22 08:17:14 +02:00
namei.c fscrypt: return -EXDEV for incompatible rename or link into encrypted dir 2020-11-10 10:23:51 +01:00
node.c f2fs: read page index before freeing 2019-01-31 08:12:37 +01:00
node.h f2fs: introduce cp_lock to protect updating of ckpt_flags 2016-09-30 17:34:20 -07:00
recovery.c f2fs: fix to recover inode's uid/gid during POR 2019-11-25 09:52:41 +01:00
segment.c f2fs: fix to spread clear_cold_data() 2019-11-28 18:28:35 +01:00
segment.h f2fs: fix to do sanity check on valid block count of segment 2019-06-22 08:17:14 +02:00
shrinker.c f2fs: fix sbi->extent_list corruption issue 2019-02-12 19:44:58 +01:00
super.c f2fs: fix memory leak of percpu counter in fill_super() 2019-11-25 09:52:13 +01:00
trace.c f2fs: do not use mutex lock in atomic context 2019-04-05 22:29:07 +02:00
trace.h
xattr.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-10-10 20:16:43 -07:00
xattr.h f2fs: add missing argument to f2fs_setxattr stub 2016-03-17 21:19:47 -07:00