62 lines
2.0 KiB
Diff
62 lines
2.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Date: Tue, 30 Jun 2020 13:59:13 -0500
|
|
Subject: [PATCH] libmultipath: fix checker detection for nvme devices
|
|
|
|
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 <bmarzins@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 83a41a4a..aa5942c3 100644
|
|
--- a/libmultipath/discovery.c
|
|
+++ b/libmultipath/discovery.c
|
|
@@ -887,6 +887,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
|
|
|