In order to fix hwhandler autodetection, commit 8794a776 made detect_alua() differentiate between failures to detect whether alua was supported, and successfully detecting that it was not supported. However, this causes nvme devices to get the TUR checker assigned to them. This is because there is nothing in detect_alua() to make it only work on scsi devices, and select_checker wasn't updated to handle detect_alua() failing without setting pp->tpgs to TPGS_NONE.
detect_alua() should automatically set pp->tpgs to TPGS_NONE and exit on non-scsi devices. Also, select_checker() should not assume that a devices is ALUA, simply because if failed to detect if alua was supported. Fixes: 8794a776 "libmultipath: fix ALUA autodetection when paths are down" Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com> --- libmultipath/discovery.c | 6 ++++++ libmultipath/propsel.c | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c index 6a45979a..bfdc8b31 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c @@ -888,6 +888,12 @@ detect_alua(struct path * pp) int tpgs; unsigned int timeout; + + if (pp->bus != SYSFS_BUS_SCSI) { + pp->tpgs = TPGS_NONE; + return; + } + if (sysfs_get_timeout(pp, &timeout) <= 0) timeout = DEF_TIMEOUT; diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c index 897e48ca..d362beb4 100644 --- a/libmultipath/propsel.c +++ b/libmultipath/propsel.c @@ -521,7 +521,9 @@ int select_checker(struct config *conf, struct path *pp) if (check_rdac(pp)) { ckr_name = RDAC; goto out; - } else if (path_get_tpgs(pp) != TPGS_NONE) { + } + path_get_tpgs(pp); + if (pp->tpgs != TPGS_NONE && pp->tpgs != TPGS_UNDEF) { ckr_name = TUR; goto out; } -- 2.17.2 -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel