--- libmultipath/checkers/rdac.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) Index: multipath-tools/libmultipath/checkers/rdac.c =================================================================== --- multipath-tools.orig/libmultipath/checkers/rdac.c +++ multipath-tools/libmultipath/checkers/rdac.c @@ -101,25 +101,33 @@ extern int libcheck_check (struct checker * c) { struct volume_access_inq inq; + int ret; memset(&inq, 0, sizeof(struct volume_access_inq)); if (0 != do_inq(c->fd, 0xC9, &inq, sizeof(struct volume_access_inq), c->timeout)) { - MSG(c, MSG_RDAC_DOWN); - return PATH_DOWN; - } else { - if ((inq.PQ_PDT & 0x20) || (inq.PQ_PDT & 0x7f)) { - /* LUN not connected*/ - return PATH_DOWN; - } + ret = PATH_DOWN; + goto done; + } else if ((inq.PQ_PDT & 0x20) || (inq.PQ_PDT & 0x7f)) { + /* LUN not connected*/ + ret = PATH_DOWN; + goto done; } - if (inq.avtcvp & 0x1) { + ret = ((inq.avtcvp & 0x1) ? PATH_UP : PATH_GHOST); + +done: + switch (ret) { + case PATH_DOWN: + MSG(c, MSG_RDAC_DOWN); + break; + case PATH_UP: MSG(c, MSG_RDAC_UP); - return PATH_UP; - } - else { + break; + case PATH_GHOST: MSG(c, MSG_RDAC_GHOST); - return PATH_GHOST; + break; } + + return ret; }