65 lines
2.7 KiB
Diff
65 lines
2.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Date: Thu, 19 Mar 2020 22:17:51 -0500
|
|
Subject: [PATCH] libmultipath: allow force reload with no active paths
|
|
|
|
If the partition information has changed on multipath devices (say,
|
|
because it was updated on another node that has access to the same
|
|
storage), users expect that running "multipathd reconfigure" will update
|
|
that. However, if the checkers for the multipath device are pending for
|
|
too long when the the device is reconfigured, multipathd will give up
|
|
waiting for them, and refuse to reload the device, since there are no
|
|
active paths. This means that no kpartx update will be triggered.
|
|
|
|
Multipath is fully capable of reloading a multipath device that has no
|
|
active paths. This has been possible for years. If multipath is supposed
|
|
to reload the device, it should do so, even if there are no active paths.
|
|
|
|
Generally, when multipath is force reloaded, kpartx will be updated.
|
|
However when a device is reloaded with no paths, the udev rules won't
|
|
run kpartx. But they also weren't running kpartx when the first valid
|
|
path appeared, even though the dm activation rules get run in this case.
|
|
This changes 11-dm-mpath.rules to run kpartx when a device goes from no
|
|
usable paths to having usable paths.
|
|
|
|
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/configure.c | 6 ------
|
|
multipath/11-dm-mpath.rules | 2 +-
|
|
2 files changed, 1 insertion(+), 7 deletions(-)
|
|
|
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
|
index c95848a0..96c79610 100644
|
|
--- a/libmultipath/configure.c
|
|
+++ b/libmultipath/configure.c
|
|
@@ -710,12 +710,6 @@ select_action (struct multipath * mpp, vector curmp, int force_reload)
|
|
return;
|
|
}
|
|
|
|
- if (pathcount(mpp, PATH_UP) == 0) {
|
|
- mpp->action = ACT_IMPOSSIBLE;
|
|
- condlog(3, "%s: set ACT_IMPOSSIBLE (no usable path)",
|
|
- mpp->alias);
|
|
- return;
|
|
- }
|
|
if (force_reload) {
|
|
mpp->force_udev_reload = 1;
|
|
mpp->action = ACT_RELOAD;
|
|
diff --git a/multipath/11-dm-mpath.rules b/multipath/11-dm-mpath.rules
|
|
index 07320a14..cd522e8c 100644
|
|
--- a/multipath/11-dm-mpath.rules
|
|
+++ b/multipath/11-dm-mpath.rules
|
|
@@ -75,7 +75,7 @@ ENV{MPATH_DEVICE_READY}=="0", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
|
|
ENV{MPATH_DEVICE_READY}!="0", ENV{.MPATH_DEVICE_READY_OLD}=="0",\
|
|
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="$env{DM_DISABLE_OTHER_RULES_FLAG_OLD}",\
|
|
ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="",\
|
|
- ENV{DM_ACTIVATION}="1"
|
|
+ ENV{DM_ACTIVATION}="1", ENV{MPATH_UNCHANGED}="0"
|
|
|
|
# The code to check multipath state ends here. We need to set
|
|
# properties and symlinks regardless whether the map is usable or
|
|
--
|
|
2.17.2
|
|
|