f2fs: Use wait_event_freezable_timeout() for freezable kthread
authorKevin Hao <haokexin@gmail.com>
Thu, 21 Dec 2023 06:49:16 +0000 (14:49 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 26 Dec 2023 21:05:56 +0000 (13:05 -0800)
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>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/gc.c
fs/f2fs/segment.c

index 405a6077bd83bd90773a7efb02b6684a3aaa6ff2..e99f58b5f15c2cea8884dd8d3cbc0f0205a11b46 100644 (file)
@@ -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;
                }
index 61da26eb61cc6d35344e33217e1e041dce730d73..4c8836ded90fc253a593a8348fb8ab78cf9eab40 100644 (file)
@@ -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())