f2fs: init discard policy after thread wakeup
Under the current logic, after the discard thread wakes up, it will not run according to the expected policy, but will use the expected policy before sleep. Move the strategy selection to after the thread wakes up, so that the running state of the thread meets expectations. Signed-off-by: Yangtao Li <frank.li@vivo.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
e219aecfd4
commit
48c08c51f9
@ -1679,6 +1679,11 @@ static int issue_discard_thread(void *data)
|
||||
set_freezable();
|
||||
|
||||
do {
|
||||
wait_event_interruptible_timeout(*q,
|
||||
kthread_should_stop() || freezing(current) ||
|
||||
dcc->discard_wake,
|
||||
msecs_to_jiffies(wait_ms));
|
||||
|
||||
if (sbi->gc_mode == GC_URGENT_HIGH ||
|
||||
!f2fs_available_free_memory(sbi, DISCARD_CACHE))
|
||||
__init_discard_policy(sbi, &dpolicy, DPOLICY_FORCE, 1);
|
||||
@ -1686,14 +1691,6 @@ static int issue_discard_thread(void *data)
|
||||
__init_discard_policy(sbi, &dpolicy, DPOLICY_BG,
|
||||
dcc->discard_granularity);
|
||||
|
||||
if (!atomic_read(&dcc->discard_cmd_cnt))
|
||||
wait_ms = dpolicy.max_interval;
|
||||
|
||||
wait_event_interruptible_timeout(*q,
|
||||
kthread_should_stop() || freezing(current) ||
|
||||
dcc->discard_wake,
|
||||
msecs_to_jiffies(wait_ms));
|
||||
|
||||
if (dcc->discard_wake)
|
||||
dcc->discard_wake = 0;
|
||||
|
||||
@ -1707,12 +1704,11 @@ static int issue_discard_thread(void *data)
|
||||
continue;
|
||||
if (kthread_should_stop())
|
||||
return 0;
|
||||
if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
|
||||
if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) ||
|
||||
!atomic_read(&dcc->discard_cmd_cnt)) {
|
||||
wait_ms = dpolicy.max_interval;
|
||||
continue;
|
||||
}
|
||||
if (!atomic_read(&dcc->discard_cmd_cnt))
|
||||
continue;
|
||||
|
||||
sb_start_intwrite(sbi->sb);
|
||||
|
||||
@ -1727,6 +1723,8 @@ static int issue_discard_thread(void *data)
|
||||
} else {
|
||||
wait_ms = dpolicy.max_interval;
|
||||
}
|
||||
if (!atomic_read(&dcc->discard_cmd_cnt))
|
||||
wait_ms = dpolicy.max_interval;
|
||||
|
||||
sb_end_intwrite(sbi->sb);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user