nilfs2: remove sc_timer_task
authorRyusuke Konishi <konishi.ryusuke@gmail.com>
Mon, 26 Aug 2024 17:41:14 +0000 (02:41 +0900)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 2 Sep 2024 03:43:43 +0000 (20:43 -0700)
After commit f5d4e04634c9 ("nilfs2: fix use-after-free of timer for log
writer thread") is applied, nilfs_construct_timeout(), which is called by
a timer and wakes up the log writer thread, is never called after the log
writer thread has terminated.

As a result, the member variable "sc_timer_task" of the "nilfs_sc_info"
structure, which was added when timer_setup() was adopted to retain a
reference to the log writer thread's task even after it had terminated, is
no longer needed, as it should be; we can simply use "sc_task" instead,
which holds a reference to the log writer thread's task for its lifetime.
So, eliminate "sc_timer_task" by this means.

Link: https://lkml.kernel.org/r/20240826174116.5008-7-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: Huang Xiaojia <huangxiaojia2@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/nilfs2/segment.c
fs/nilfs2/segment.h

index e4ec36d6660757a4e651e47aabaf9b8fd1697a3d..ed14e5d4a354ece6515cc0aae604b7c146ea78a4 100644 (file)
@@ -2502,7 +2502,7 @@ static void nilfs_construction_timeout(struct timer_list *t)
 {
        struct nilfs_sc_info *sci = from_timer(sci, t, sc_timer);
 
-       wake_up_process(sci->sc_timer_task);
+       wake_up_process(sci->sc_task);
 }
 
 static void
@@ -2640,7 +2640,6 @@ static int nilfs_segctor_thread(void *arg)
        struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
        int timeout = 0;
 
-       sci->sc_timer_task = current;
        timer_setup(&sci->sc_timer, nilfs_construction_timeout, 0);
 
        /* start sync. */
index 2499721ebcc96644ccdbc50d7f8497393dde1dbc..7d1160a266df923b54c0a6f5cc1e09c90613143e 100644 (file)
@@ -115,7 +115,6 @@ struct nilfs_segsum_pointer {
  * @sc_lseg_stime: Start time of the latest logical segment
  * @sc_watermark: Watermark for the number of dirty buffers
  * @sc_timer: Timer for segctord
- * @sc_timer_task: Thread woken up by @sc_timer
  * @sc_task: current thread of segctord
  */
 struct nilfs_sc_info {
@@ -172,7 +171,6 @@ struct nilfs_sc_info {
        unsigned long           sc_watermark;
 
        struct timer_list       sc_timer;
-       struct task_struct     *sc_timer_task;
        struct task_struct     *sc_task;
 };