From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Teigland Date: Wed, 9 Aug 2017 11:18:51 -0500 Subject: [Cluster-devel] [PATCH 10/17] dlm: use schedule_timeout instead of schedule in dlm_recoverd In-Reply-To: <03ef32c625f94c02b5f57cfe2794450a@TGXML394.toshiba.local> References: <03ef32c625f94c02b5f57cfe2794450a@TGXML394.toshiba.local> Message-ID: <20170809161851.GC21204@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On Wed, Aug 09, 2017 at 05:51:01AM +0000, tsutomu.owa at toshiba.co.jp wrote: > When dlm_recoverd_stop() is called between kthread_should_stop() and > set_task_state(), dlm_recoverd will not wake up. This works, but have you looked elsewhere in the kernel for kthread examples we could copy that do a race-free check without a timeout? Thanks > > Signed-off-by: Tadashi Miyauchi > Signed-off-by: Tsutomu Owa > --- > 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 > > >