diff options
author | Chao Yu <yuchao0@huawei.com> | 2020-11-25 05:57:36 +0300 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2020-12-03 09:00:21 +0300 |
commit | 493720a4854343b7c3fe100cda6a3a2c3f8d4b5d (patch) | |
tree | 9e2b6b22fdc1fcfe86c2f37cd8c51dce42832280 /fs/f2fs/inode.c | |
parent | 8769918bf06c9cfb01a1a6ee0e547c9916881496 (diff) | |
download | linux-493720a4854343b7c3fe100cda6a3a2c3f8d4b5d.tar.xz |
f2fs: fix to avoid REQ_TIME and CP_TIME collision
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>
Diffstat (limited to 'fs/f2fs/inode.c')
0 files changed, 0 insertions, 0 deletions