Skip to content

Commit

Permalink
fs/nilfs2: convert timers to use timer_setup()
Browse files Browse the repository at this point in the history
In preparation for unconditionally passing the struct timer_list pointer
to all timer callbacks, switch to using the new timer_setup() and
from_timer() to pass the timer pointer explicitly.  This requires adding
a pointer to hold the timer's target task, as the lifetime of sc_task
doesn't appear to match the timer's task.

Link: http://lkml.kernel.org/r/20171016235900.GA102729@beast
Signed-off-by: Kees Cook <[email protected]>
Acked-by: Ryusuke Konishi <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
kees authored and torvalds committed Nov 18, 2017
1 parent fb910c4 commit 7554e9c
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
11 changes: 5 additions & 6 deletions fs/nilfs2/segment.c
Original file line number Diff line number Diff line change
Expand Up @@ -2400,11 +2400,11 @@ static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode)
return err;
}

static void nilfs_construction_timeout(unsigned long data)
static void nilfs_construction_timeout(struct timer_list *t)
{
struct task_struct *p = (struct task_struct *)data;
struct nilfs_sc_info *sci = from_timer(sci, t, sc_timer);

wake_up_process(p);
wake_up_process(sci->sc_timer_task);
}

static void
Expand Down Expand Up @@ -2542,8 +2542,7 @@ static int nilfs_segctor_thread(void *arg)
struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
int timeout = 0;

sci->sc_timer.data = (unsigned long)current;
sci->sc_timer.function = nilfs_construction_timeout;
sci->sc_timer_task = current;

/* start sync. */
sci->sc_task = current;
Expand Down Expand Up @@ -2674,7 +2673,7 @@ static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb,
INIT_LIST_HEAD(&sci->sc_gc_inodes);
INIT_LIST_HEAD(&sci->sc_iput_queue);
INIT_WORK(&sci->sc_iput_work, nilfs_iput_work_func);
init_timer(&sci->sc_timer);
timer_setup(&sci->sc_timer, nilfs_construction_timeout, 0);

sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT;
sci->sc_mjcp_freq = HZ * NILFS_SC_DEFAULT_SR_FREQ;
Expand Down
1 change: 1 addition & 0 deletions fs/nilfs2/segment.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ struct nilfs_sc_info {
unsigned long sc_watermark;

struct timer_list sc_timer;
struct task_struct *sc_timer_task;
struct task_struct *sc_task;
};

Expand Down

0 comments on commit 7554e9c

Please sign in to comment.