From 959873950f6c0f71ea2d4e0655e8ca8571979f25 Mon Sep 17 00:00:00 2001 From: Christophe Varoqui Date: Sat, 12 Nov 2005 01:09:18 +0100 Subject: [PATCH] [multipathd] fix offline devices reported as active multipathd(8) continues calling reinstate_path() in checkerloop(), if multipathd(8) is started on the system which has multipath maps including offline devices. The reason is pp->checkfn() returns -1 for offline devices and pp->state of these paths are 1. (I'm using "echo offline > /sys/block/sd?/device/state" for the testing.) As a result, multipathd(8) makes offline devices active state. And this behavior also affects the no_path_retry feature, since struct multipath.nr_active is incremented in reinstate_path(). The following patch fixes this problem. If the return value from pp->checkfn is -1, the path isn't available. So I think that we can ignore it. Kiyoshi Ueda, NEC --- multipathd/main.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/multipathd/main.c b/multipathd/main.c index 4275a37..f23a98e 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -1240,6 +1240,12 @@ checkerloop (void *ap) newstate = pp->checkfn(pp->fd, checker_msg, &pp->checker_context); + if (newstate < 0) { + condlog(2, "%s: unusable path", pp->dev); + pathinfo(pp, conf->hwtable, 0); + continue; + } + if (newstate != pp->state) { pp->state = newstate; LOG_MSG(1, checker_msg); -- 2.7.4