linux/fs/f2fs
Zhang Qilong 07725adc55 f2fs: fix race condition on setting FI_NO_EXTENT flag
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>
2022-10-04 13:31:43 -07:00
..
acl.c f2fs: support idmapped mounts 2022-02-12 06:20:46 -08:00
acl.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
checkpoint.c f2fs: fix wrong dirty page count when race between mmap and fallocate. 2022-10-04 13:31:42 -07:00
compress.c f2fs: remove redundant check in f2fs_sanity_check_cluster 2022-10-04 13:31:42 -07:00
data.c f2fs: fix wrong dirty page count when race between mmap and fallocate. 2022-10-04 13:31:42 -07:00
debug.c f2fs: adjust zone capacity when considering valid block count 2022-07-30 20:16:20 -07:00
dir.c f2fs: don't use casefolded comparison for "." and ".." 2022-05-17 11:19:23 -07:00
extent_cache.c f2fs: fix race condition on setting FI_NO_EXTENT flag 2022-10-04 13:31:43 -07:00
f2fs.h f2fs: fix typo 2022-10-04 13:31:42 -07:00
file.c f2fs: iostat: support accounting compressed IO 2022-08-29 21:15:51 -07:00
gc.c f2fs: remove gc_urgent_high_limited for cleanup 2022-08-29 21:15:51 -07:00
gc.h f2fs: remove redundant code for gc condition 2022-07-30 20:16:20 -07:00
hash.c f2fs: don't use casefolded comparison for "." and ".." 2022-05-17 11:19:23 -07:00
inline.c f2fs: use memcpy_{to,from}_page() where possible 2022-08-29 21:15:51 -07:00
inode.c f2fs: add static init_idisk_time function to reduce the code 2022-10-04 13:31:42 -07:00
iostat.c f2fs: iostat: support accounting compressed IO 2022-08-29 21:15:51 -07:00
iostat.h f2fs: iostat: support accounting compressed IO 2022-08-29 21:15:51 -07:00
Kconfig f2fs: introduce F2FS_UNFAIR_RWSEM to support unfair rwsem 2022-03-04 09:15:53 -08:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
namei.c f2fs: attach inline_data after setting compression 2022-06-19 15:16:10 -07:00
node.c f2fs: fix wrong dirty page count when race between mmap and fallocate. 2022-10-04 13:31:42 -07:00
node.h f2fs: change the current atomic write way 2022-05-12 10:14:03 -07:00
recovery.c attr: port attribute changes to new types 2022-06-26 18:18:56 +02:00
segment.c f2fs: replace logical value "true" with a int number 2022-09-12 23:08:25 -07:00
segment.h f2fs: adjust zone capacity when considering valid block count 2022-07-30 20:16:20 -07:00
shrinker.c f2fs: avoid race condition for shrinker count 2020-12-03 00:59:26 -08:00
super.c f2fs: increase the limit for reserve_root 2022-09-12 23:08:21 -07:00
sysfs.c f2fs: remove gc_urgent_high_limited for cleanup 2022-08-29 21:15:51 -07:00
verity.c f2fs: use memcpy_{to,from}_page() where possible 2022-08-29 21:15:51 -07:00
xattr.c f2fs: move f2fs to use reader-unfair rwsems 2022-01-24 17:40:04 -08:00
xattr.h f2fs: code cleanup by removing ifdef macro surrounding 2020-05-26 18:56:10 -07:00