Message ID | 20231221064916.1930095-1-haokexin@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 94e7eb42414b6b1c11f14e0f760540993f429809 |
Headers | show |
Series | [f2fs-dev,v2] f2fs: Use wait_event_freezable_timeout() for freezable kthread | expand |
On 2023/12/21 14:49, Kevin Hao wrote: > A freezable kernel thread can enter frozen state during freezing by > either calling try_to_freeze() or using wait_event_freezable() and its > variants. So for the following snippet of code in a kernel thread loop: > wait_event_interruptible_timeout(); > try_to_freeze(); > > We can change it to a simple wait_event_freezable_timeout() and then > eliminate the function calls to try_to_freeze() and freezing(). > > Signed-off-by: Kevin Hao <haokexin@gmail.com> Reviewed-by: Chao Yu <chao@kernel.org> Thanks,
Hello: This patch was applied to jaegeuk/f2fs.git (dev) by Jaegeuk Kim <jaegeuk@kernel.org>: On Thu, 21 Dec 2023 14:49:16 +0800 you wrote: > A freezable kernel thread can enter frozen state during freezing by > either calling try_to_freeze() or using wait_event_freezable() and its > variants. So for the following snippet of code in a kernel thread loop: > wait_event_interruptible_timeout(); > try_to_freeze(); > > We can change it to a simple wait_event_freezable_timeout() and then > eliminate the function calls to try_to_freeze() and freezing(). > > [...] Here is the summary with links: - [f2fs-dev,v2] f2fs: Use wait_event_freezable_timeout() for freezable kthread https://git.kernel.org/jaegeuk/f2fs/c/94e7eb42414b You are awesome, thank you!
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 405a6077bd83..e99f58b5f15c 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -46,8 +46,8 @@ static int gc_thread_func(void *data) do { bool sync_mode, foreground = false; - wait_event_interruptible_timeout(*wq, - kthread_should_stop() || freezing(current) || + wait_event_freezable_timeout(*wq, + kthread_should_stop() || waitqueue_active(fggc_wq) || gc_th->gc_wake, msecs_to_jiffies(wait_ms)); @@ -59,7 +59,7 @@ static int gc_thread_func(void *data) if (gc_th->gc_wake) gc_th->gc_wake = false; - if (try_to_freeze() || f2fs_readonly(sbi->sb)) { + if (f2fs_readonly(sbi->sb)) { stat_other_skip_bggc_count(sbi); continue; } diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 61da26eb61cc..4c8836ded90f 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -1887,9 +1887,8 @@ static int issue_discard_thread(void *data) set_freezable(); do { - wait_event_interruptible_timeout(*q, - kthread_should_stop() || freezing(current) || - dcc->discard_wake, + wait_event_freezable_timeout(*q, + kthread_should_stop() || dcc->discard_wake, msecs_to_jiffies(wait_ms)); if (sbi->gc_mode == GC_URGENT_HIGH || @@ -1907,8 +1906,6 @@ static int issue_discard_thread(void *data) if (atomic_read(&dcc->queued_discard)) __wait_all_discard_cmd(sbi, NULL); - if (try_to_freeze()) - continue; if (f2fs_readonly(sbi->sb)) continue; if (kthread_should_stop())
A freezable kernel thread can enter frozen state during freezing by either calling try_to_freeze() or using wait_event_freezable() and its variants. So for the following snippet of code in a kernel thread loop: wait_event_interruptible_timeout(); try_to_freeze(); We can change it to a simple wait_event_freezable_timeout() and then eliminate the function calls to try_to_freeze() and freezing(). Signed-off-by: Kevin Hao <haokexin@gmail.com> --- v2: Drop the invocation of freezing(). fs/f2fs/gc.c | 6 +++--- fs/f2fs/segment.c | 7 ++----- 2 files changed, 5 insertions(+), 8 deletions(-)