When dlm_recoverd_stop() is called between kthread_should_stop() and set_task_state(), dlm_recoverd will not wake up.
Signed-off-by: Tadashi Miyauchi <miyau...@toshiba-tops.co.jp> Signed-off-by: Tsutomu Owa <tsutomu....@toshiba.co.jp> --- fs/dlm/recoverd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/dlm/recoverd.c b/fs/dlm/recoverd.c index 6859b4b..d3956cc 100644 --- a/fs/dlm/recoverd.c +++ b/fs/dlm/recoverd.c @@ -276,6 +276,7 @@ static void do_ls_recovery(struct dlm_ls *ls) static int dlm_recoverd(void *arg) { struct dlm_ls *ls; + unsigned long timeout = (dlm_config.ci_recover_timer * HZ) >> 1; ls = dlm_find_lockspace_local(arg); if (!ls) { @@ -291,7 +292,7 @@ static int dlm_recoverd(void *arg) set_current_state(TASK_INTERRUPTIBLE); if (!test_bit(LSFL_RECOVER_WORK, &ls->ls_flags) && !test_bit(LSFL_RECOVER_DOWN, &ls->ls_flags)) - schedule(); + schedule_timeout(timeout); set_current_state(TASK_RUNNING); if (test_and_clear_bit(LSFL_RECOVER_DOWN, &ls->ls_flags)) { -- 2.7.4