android_kernel_xiaomi_sm8450/fs/f2fs
Chao Yu 0b8230d44c f2fs: fix to avoid REQ_TIME and CP_TIME collision
[ Upstream commit 493720a4854343b7c3fe100cda6a3a2c3f8d4b5d ]

Lei Li reported a issue: if foreground operations are frequent, background
checkpoint may be always skipped due to below check, result in losing more
data after sudden power-cut.

f2fs_balance_fs_bg()
...
	if (!is_idle(sbi, REQ_TIME) &&
		(!excess_dirty_nats(sbi) && !excess_dirty_nodes(sbi)))
		return;

E.g:
cp_interval = 5 second
idle_interval = 2 second
foreground operation interval = 1 second (append 1 byte per second into file)

In such case, no matter when it calls f2fs_balance_fs_bg(), is_idle(, REQ_TIME)
returns false, result in skipping background checkpoint.

This patch changes as below to make trigger condition being more reasonable:
- trigger sync_fs() if dirty_{nats,nodes} and prefree segs exceeds threshold;
- skip triggering sync_fs() if there is any background inflight IO or there is
foreground operation recently and meanwhile cp_rwsem is being held by someone;

Reported-by: Lei Li <noctis.akm@gmail.com>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Stable-dep-of: d80afefb17e0 ("f2fs: fix to account FS_CP_DATA_IO correctly")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-10-26 13:25:43 +02:00
..
acl.c f2fs: clean up kvfree 2020-09-14 11:15:37 -07:00
acl.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
checkpoint.c f2fs: fix to do sanity check on destination blkaddr during recovery 2022-10-26 13:25:12 +02:00
compress.c f2fs: compress: fix to print raw data size in error path of lz4 decompression 2022-04-08 14:40:33 +02:00
data.c f2fs: fix compressed file start atomic write may cause data corruption 2022-04-08 14:40:04 +02:00
debug.c f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
dir.c f2fs: reduce the scope of setting fsck tag when de->name_len is zero 2021-09-18 13:40:13 +02:00
extent_cache.c f2fs: fix race condition on setting FI_NO_EXTENT flag 2022-10-26 13:25:43 +02:00
f2fs.h f2fs: fix to avoid REQ_TIME and CP_TIME collision 2022-10-26 13:25:43 +02:00
file.c f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time 2022-08-21 15:16:11 +02:00
gc.c f2fs: fix to do sanity check on summary info 2022-10-26 13:25:12 +02:00
gc.h f2fs: support age threshold based garbage collection 2020-09-11 11:11:15 -07:00
hash.c f2fs-for-5.8-rc1 2020-06-09 11:28:59 -07:00
inline.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:21:21 +02:00
inode.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:21:21 +02:00
Kconfig f2fs: compress: support lzo-rle compress algorithm 2020-05-11 20:36:46 -07:00
Makefile f2fs: support data compression 2020-01-17 16:48:07 -08:00
namei.c f2fs: attach inline_data after setting compression 2022-06-29 08:59:51 +02:00
node.c f2fs: fix to avoid use f2fs_bug_on() in f2fs_new_node_page() 2022-08-25 11:38:21 +02:00
node.h f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
recovery.c f2fs: fix to do sanity check on summary info 2022-10-26 13:25:12 +02:00
segment.c f2fs: fix to avoid REQ_TIME and CP_TIME collision 2022-10-26 13:25:43 +02:00
segment.h f2fs: fix to do sanity check on total_data_blocks 2022-06-09 10:21:21 +02:00
shrinker.c f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
super.c f2fs: increase the limit for reserve_root 2022-10-26 13:25:12 +02:00
sysfs.c f2fs: fix to enable ATGC correctly via gc_idle sysfs interface 2022-04-08 14:40:03 +02:00
trace.c f2fs: do not use mutex lock in atomic context 2019-03-05 19:58:06 -08:00
trace.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
verity.c f2fs: fix error handling in f2fs_end_enable_verity() 2021-05-11 14:47:34 +02:00
xattr.c f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr() 2021-12-29 12:26:05 +01:00
xattr.h f2fs: code cleanup by removing ifdef macro surrounding 2020-05-26 18:56:10 -07:00