From d7926d1701e2f21a30ccee5775cd62bd51a0271d Mon Sep 17 00:00:00 2001 From: Michael Meffie Date: Wed, 1 Aug 2012 11:42:34 -0400 Subject: [PATCH] bozo: avoid canceling the sigkill timer for hung processes A sigkill signal is sent to fileserver processes when a timeout is exceeded for shutting down processes for the fs/dafs bnode. (Currently 30 minutes for the fileserver, 1 minute for the other server processes.) If the bnode goal is set to run before this timeout expires, the timer is incorrectly stopped, and a wedged process is never killed. Fix this by not canceling the timer when a fs/dafs process has been signaled to shutdown, regardless of the current goal. Reviewed-on: http://gerrit.openafs.org/7920 Reviewed-by: Derrick Brashear Tested-by: BuildBot (cherry picked from commit 09f5a1e6053e6db3df581543875512d8cff259ae) Change-Id: I0d5fabed13e597d2571033468688457c38b49283 Reviewed-on: http://gerrit.openafs.org/8583 Tested-by: BuildBot Reviewed-by: Ken Dreyer Reviewed-by: Paul Smeddle --- src/bozo/fsbnodeops.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bozo/fsbnodeops.c b/src/bozo/fsbnodeops.c index 285786179..b3700353a 100644 --- a/src/bozo/fsbnodeops.c +++ b/src/bozo/fsbnodeops.c @@ -784,7 +784,12 @@ fs_procexit(struct bnode *bn, struct bnode_proc *aproc) static void SetNeedsClock(struct fsbnode *ab) { - if (ab->b.goal == 1 && ab->fileRunning && ab->volRunning + if ((ab->fileSDW && !ab->fileKillSent) || (ab->volSDW && !ab->volKillSent) + || (ab->scanSDW && !ab->scanKillSent) || (ab->salSDW && !ab->salKillSent) + || (ab->salsrvSDW && !ab->salsrvKillSent)) { + /* SIGQUIT sent, will send SIGKILL if process does not exit */ + ab->needsClock = 1; + } else if (ab->b.goal == 1 && ab->fileRunning && ab->volRunning && (!ab->scancmd || ab->scanRunning) && (!ab->salsrvcmd || ab->salsrvRunning)) ab->needsClock = 0; /* running normally */ -- 2.39.5