linux/fs/f2fs
Chao Yu 295b50e95e f2fs: fix to shrink read extent node in batches
[ Upstream commit 3fc5d5a182 ]

We use rwlock to protect core structure data of extent tree during
its shrink, however, if there is a huge number of extent nodes in
extent tree, during shrink of extent tree, it may hold rwlock for
a very long time, which may trigger kernel hang issue.

This patch fixes to shrink read extent node in batches, so that,
critical region of the rwlock can be shrunk to avoid its extreme
long time hold.

Reported-by: Xiuhong Wang <xiuhong.wang@unisoc.com>
Closes: https://lore.kernel.org/linux-f2fs-devel/20241112110627.1314632-1-xiuhong.wang@unisoc.com/
Signed-off-by: Xiuhong Wang <xiuhong.wang@unisoc.com>
Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2024-12-14 20:00:15 +01:00
..
acl.c fs: port i_{g,u}id_into_vfs{g,u}id() to mnt_idmap 2023-01-19 09:24:29 +01:00
acl.h fs: port ->set_acl() to pass mnt_idmap 2023-01-19 09:24:27 +01:00
checkpoint.c f2fs: fix to avoid potential deadlock in f2fs_record_stop_reason() 2024-12-09 10:32:26 +01:00
compress.c f2fs: compress: don't redirty sparse cluster during {,de}compress 2024-10-04 16:29:37 +02:00
data.c f2fs: fix null reference error when checking end of zone 2024-12-09 10:32:41 +01:00
debug.c f2fs: use BLKS_PER_SEG, BLKS_PER_SEC, and SEGS_PER_SEC 2024-06-12 11:12:28 +02:00
dir.c f2fs: prevent possible int overflow in dir_block_index() 2024-10-04 16:29:54 +02:00
extent_cache.c f2fs: fix to shrink read extent node in batches 2024-12-14 20:00:15 +01:00
f2fs.h f2fs: fix to avoid potential deadlock in f2fs_record_stop_reason() 2024-12-09 10:32:26 +01:00
file.c f2fs: fix to avoid forcing direct write to use buffered IO on inline_data inode 2024-12-09 10:32:28 +01:00
gc.c f2fs: fix to avoid use GC_AT when setting gc_mode as GC_URGENT_LOW or GC_URGENT_MID 2024-12-09 10:32:26 +01:00
gc.h f2fs: Fix system crash due to lack of free space in LFS 2023-04-10 10:58:45 -07:00
hash.c f2fs: don't use casefolded comparison for "." and ".." 2022-05-17 11:19:23 -07:00
inline.c f2fs: fix to do sanity check on blocks for inline_data inode 2024-09-08 07:54:47 +02:00
inode.c f2fs: fix f2fs_bug_on when uninstalling filesystem call f2fs_evict_inode. 2024-12-14 20:00:13 +01:00
iostat.c f2fs: add async reset zone command support 2023-06-12 13:04:09 -07:00
iostat.h f2fs: use iostat_lat_type directly as a parameter in the iostat_update_and_unbind_ctx() 2023-02-07 10:39:28 -08:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
namei.c f2fs: get rid of online repaire on corrupted directory 2024-10-04 16:29:37 +02:00
node.c f2fs: print message if fscorrupted was found in f2fs_new_node_page() 2024-12-14 20:00:14 +01:00
node.h f2fs: use BLKS_PER_SEG, BLKS_PER_SEC, and SEGS_PER_SEC 2024-06-12 11:12:28 +02:00
recovery.c f2fs: use BLKS_PER_SEG, BLKS_PER_SEC, and SEGS_PER_SEC 2024-06-12 11:12:28 +02:00
segment.c f2fs: fix to drop all discards after creating snapshot on lvm device 2024-12-14 19:59:45 +01:00
segment.h f2fs: fix to account dirty data in __get_secs_required() 2024-12-09 10:32:25 +01:00
shrinker.c f2fs: add block_age-based extent cache 2022-12-12 14:53:56 -08:00
super.c f2fs: fix to drop all discards after creating snapshot on lvm device 2024-12-14 19:59:45 +01:00
sysfs.c f2fs: check validation of fault attrs in f2fs_build_fault_attr() 2024-07-11 12:49:09 +02:00
verity.c f2fs-for-6.3-rc1 2023-02-27 16:18:51 -08:00
xattr.c f2fs: reduce expensive checkpoint trigger frequency 2024-10-04 16:29:36 +02:00
xattr.h f2fs: cleanup MIN_INLINE_XATTR_SIZE 2023-06-26 06:07:10 -07:00