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 <hare@xxxxxxx> --- libmultipath/checkers/tur.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c index b76dcec..bd7372d 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; -- 1.8.1.4 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel