[Cluster-devel] [PATCH 10/17] dlm: use schedule_timeout instead of schedule in dlm_recoverd

tsutomu.owa at toshiba.co.jp tsutomu.owa at toshiba.co.jp
Wed Aug 9 05:51:01 UTC 2017


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 <miyauchi at toshiba-tops.co.jp>
Signed-off-by: Tsutomu Owa <tsutomu.owa at 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







More information about the Cluster-devel mailing list