multipath: do not call tur in sync mode if pthread_cancel fails
authorHannes Reinecke <hare@suse.de>
Fri, 13 Dec 2013 12:12:42 +0000 (13:12 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Fri, 13 Dec 2013 21:40:52 +0000 (22:40 +0100)
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@suse.de>
libmultipath/checkers/tur.c

index b76dcec..bd7372d 100644 (file)
@@ -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;