From: Hannes Reinecke Date: Fri, 13 Dec 2013 12:12:42 +0000 (+0100) Subject: multipath: do not call tur in sync mode if pthread_cancel fails X-Git-Tag: 0.5.0~12 X-Git-Url: https://git.opensvc.com/gitweb.cgi?p=multipath-tools%2F.git;a=commitdiff_plain;h=05cbea354172be5507ac83c98bbac8e02aa8cf3c multipath: do not call tur in sync mode if pthread_cancel fails When pthread_cancel fails the thread is stuck, most likely during I/O submission. So it would be pointless to call the tur checker in sync mode here, as this would be stuck, too. Hence we should rather return 'PATH_TIMEOUT' and hope the situation resolves itself over time. Signed-off-by: Hannes Reinecke --- diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c index b76dcecb..bd7372d8 100644 --- a/libmultipath/checkers/tur.c +++ b/libmultipath/checkers/tur.c @@ -298,7 +298,6 @@ libcheck_check (struct checker * c) ct->running = 0; MSG(c, MSG_TUR_TIMEOUT); tur_status = PATH_TIMEOUT; - ct->state = PATH_UNCHECKED; } else { condlog(3, "%d:%d: tur checker not finished", TUR_DEVT(ct)); @@ -317,9 +316,9 @@ libcheck_check (struct checker * c) if (ct->thread) { /* pthread cancel failed. continue in sync mode */ pthread_mutex_unlock(&ct->lock); - condlog(3, "%d:%d: tur thread not responding, " - "using sync mode", TUR_DEVT(ct)); - return tur_check(c->fd, c->timeout, c->message); + condlog(3, "%d:%d: tur thread not responding", + TUR_DEVT(ct)); + return PATH_TIMEOUT; } /* Start new TUR checker */ ct->state = PATH_UNCHECKED;