Compare commits
45 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6f2be9e59 | ||
|
|
3c9f48504b | ||
|
|
9f48ebd2e2 | ||
|
|
30306052cc | ||
|
|
f2377371e3 | ||
|
|
3c2eb3f84e | ||
|
|
05ecb26e7c | ||
|
|
61847c90be | ||
|
|
4ec4661dee | ||
|
|
75d5c0c70a | ||
|
|
94144d9276 | ||
|
|
0c6649fa32 | ||
|
|
354f1e7cfb | ||
|
|
519bd15b4d | ||
|
|
3cde646ade | ||
|
|
4e4233829d | ||
|
|
59945a7f7e | ||
|
|
588b3f63e9 | ||
|
|
6496193f3f | ||
|
|
6956fa4aa7 | ||
|
|
c9568c86e6 | ||
|
|
835a8a43de | ||
|
|
b0b20d4f7b | ||
|
|
0f3122f75f | ||
|
|
f52f69af95 | ||
|
|
748e0a08b6 | ||
|
|
e5eddaae1a | ||
|
|
d88fe4b956 | ||
|
|
0761930b9e | ||
|
|
bbfe9b1229 | ||
|
|
8e8d008d17 | ||
|
|
bf5e5e4891 | ||
|
|
c5432960d9 | ||
|
|
ef9089f4e8 | ||
|
|
ca605574d1 | ||
|
|
652daa1a21 | ||
|
|
dad5d3a235 | ||
|
|
05385b92f8 | ||
|
|
3121417f06 | ||
|
|
06885ec9cc | ||
|
|
81ff4f74fa | ||
|
|
18d73f2333 | ||
|
|
ce5b96a800 | ||
|
|
be2d12e9d4 | ||
|
|
a4b79a10d4 |
57 changed files with 1631 additions and 2582 deletions
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -22,3 +22,16 @@ multipath-tools-091027.tar.gz
|
|||
/multipath-tools-0.8.4.tgz
|
||||
/multipath-tools-0.8.5.tgz
|
||||
/multipath-tools-0.8.6.tgz
|
||||
/multipath-tools-0.8.7.tgz
|
||||
/multipath-tools-0.8.9.tgz
|
||||
/multipath-tools-0.9.0.tgz
|
||||
/multipath-tools-0.9.3.tgz
|
||||
/multipath-tools-0.9.4.tgz
|
||||
/multipath-tools-0.9.5.tgz
|
||||
/multipath-tools-0.9.6.tgz
|
||||
/multipath-tools-0.9.7.tgz
|
||||
/multipath-tools-0.9.8.tgz
|
||||
/multipath-tools-0.9.9.tgz
|
||||
/multipath-tools-0.10.0.tgz
|
||||
/multipath-tools-0.11.1.tgz
|
||||
/multipath-tools-0.13.0.tgz
|
||||
|
|
|
|||
63
0001-RH-fixup-udev-rules-for-redhat.patch
Normal file
63
0001-RH-fixup-udev-rules-for-redhat.patch
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
From 64a07df23affd21842fdc604887276e62e5b41de Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 13 Apr 2017 07:22:23 -0500
|
||||
Subject: [PATCH] RH: fixup udev rules for redhat
|
||||
|
||||
The multipath rules need to run after scsi_id is run. This means moving
|
||||
them after 60-persistent-storage.rules for redhat. Redhat also uses a
|
||||
different naming scheme for partitions than SuSE.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
kpartx/kpartx.rules.in | 2 +-
|
||||
multipath/Makefile | 4 ++--
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 9e3dc466..ead89030 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -34,7 +34,7 @@ endif
|
||||
# Paths. All these can be overridden on the "make" command line.
|
||||
prefix :=
|
||||
# Prefix for binaries
|
||||
-exec_prefix := $(prefix)
|
||||
+exec_prefix := $(prefix)/usr
|
||||
# Prefix for non-essential libraries (libdmmp)
|
||||
usr_prefix := $(if $(prefix),$(prefix),/usr)
|
||||
# Prefix for configuration files (multipath.conf)
|
||||
diff --git a/kpartx/kpartx.rules.in b/kpartx/kpartx.rules.in
|
||||
index 9d879609..2049eb8f 100644
|
||||
--- a/kpartx/kpartx.rules.in
|
||||
+++ b/kpartx/kpartx.rules.in
|
||||
@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end"
|
||||
GOTO="kpartx_end"
|
||||
|
||||
LABEL="run_kpartx"
|
||||
-RUN+="@BINDIR@/kpartx -un -p -part /dev/$name"
|
||||
+RUN+="@BINDIR@/kpartx -un /dev/$name"
|
||||
|
||||
LABEL="kpartx_end"
|
||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
||||
index 67fb5e62..2ea9e528 100644
|
||||
--- a/multipath/Makefile
|
||||
+++ b/multipath/Makefile
|
||||
@@ -27,7 +27,7 @@ install:
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 99-z-dm-mpath-late.rules $(DESTDIR)$(udevrulesdir)
|
||||
- $(Q)$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules
|
||||
+ $(Q)$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8
|
||||
@@ -50,7 +50,7 @@ uninstall:
|
||||
$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/99-z-dm-mpath-late.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
|
||||
$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
|
||||
- $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
|
||||
+ $(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8
|
||||
$(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5
|
||||
$(Q)$(RM) $(DESTDIR)$(tmpfilesdir)/multipath.conf
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: lixiaokeng <lixiaokeng@huawei.com>
|
||||
Date: Fri, 9 Apr 2021 15:15:05 +0800
|
||||
Subject: [PATCH] libmultipath: fix memory leak in checker_cleanup_thread
|
||||
|
||||
If checker_cleanup_thread is called after cleanup_checkers,
|
||||
the checker_class will not be freed.
|
||||
|
||||
Here, we use free_checker_class instead of checker_class_unref
|
||||
in checker_cleanup_thread.
|
||||
|
||||
Signed-off-by: Lixiaokeng <lixiaokeng@huawei.com>
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/checkers.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
|
||||
index 2dd9915d..8039c2bf 100644
|
||||
--- a/libmultipath/checkers.c
|
||||
+++ b/libmultipath/checkers.c
|
||||
@@ -368,7 +368,7 @@ static void checker_cleanup_thread(void *arg)
|
||||
{
|
||||
struct checker_class *cls = arg;
|
||||
|
||||
- (void)checker_class_unref(cls);
|
||||
+ free_checker_class(cls);
|
||||
rcu_unregister_thread();
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From f7be16ac9fce97585a4552d49f3d3c54a93c9c17 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 2 Jul 2014 12:49:53 -0500
|
||||
Subject: [PATCH] RH: Remove the property blacklist exception builtin
|
||||
|
|
@ -13,26 +13,25 @@ it.
|
|||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/blacklist.c | 6 ++----
|
||||
multipath/multipath.conf.5 | 11 ++++++-----
|
||||
tests/blacklist.c | 7 ++-----
|
||||
3 files changed, 10 insertions(+), 14 deletions(-)
|
||||
libmultipath/blacklist.c | 5 ++---
|
||||
multipath/multipath.conf.5.in | 11 ++++++-----
|
||||
tests/blacklist.c | 7 ++-----
|
||||
3 files changed, 10 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
|
||||
index 6c6a5979..785f5ee9 100644
|
||||
index 17e1b54a..10d13e98 100644
|
||||
--- a/libmultipath/blacklist.c
|
||||
+++ b/libmultipath/blacklist.c
|
||||
@@ -201,9 +201,6 @@ setup_default_blist (struct config * conf)
|
||||
if (store_ble(conf->blist_devnode, "!^(sd[a-z]|dasd[a-z]|nvme[0-9])", ORIGIN_DEFAULT))
|
||||
return 1;
|
||||
|
||||
@@ -230,8 +230,6 @@ setup_default_blist (struct config * conf)
|
||||
ORIGIN_DEFAULT))
|
||||
return 1;
|
||||
}
|
||||
- if (store_ble(conf->elist_property, "(SCSI_IDENT_|ID_WWN)", ORIGIN_DEFAULT))
|
||||
- return 1;
|
||||
-
|
||||
|
||||
vector_foreach_slot (conf->hwtable, hwe, i) {
|
||||
if (hwe->bl_product) {
|
||||
if (find_blacklist_device(conf->blist_device,
|
||||
@@ -407,7 +404,8 @@ filter_property(const struct config *conf, struct udev_device *udev,
|
||||
@@ -438,7 +436,8 @@ filter_property(const struct config *conf, struct udev_device *udev,
|
||||
*uid_attribute != '\0';
|
||||
bool uid_attr_seen = false;
|
||||
|
||||
|
|
@ -42,11 +41,11 @@ index 6c6a5979..785f5ee9 100644
|
|||
udev_list_entry_foreach(list_entry,
|
||||
udev_device_get_properties_list_entry(udev)) {
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index d6b8c7f6..689d09aa 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1347,9 +1347,14 @@ keywords. Both are regular expressions. For a full description of these keywords
|
||||
diff --git a/multipath/multipath.conf.5.in b/multipath/multipath.conf.5.in
|
||||
index 3c9ae097..ba291e11 100644
|
||||
--- a/multipath/multipath.conf.5.in
|
||||
+++ b/multipath/multipath.conf.5.in
|
||||
@@ -1470,9 +1470,14 @@ keywords. Both are regular expressions. For a full description of these keywords
|
||||
Regular expression for an udev property. All
|
||||
devices that have matching udev properties will be excluded/included.
|
||||
The handling of the \fIproperty\fR keyword is special,
|
||||
|
|
@ -62,7 +61,7 @@ index d6b8c7f6..689d09aa 100644
|
|||
.
|
||||
.RS
|
||||
.PP
|
||||
@@ -1360,10 +1365,6 @@ Blacklisting by missing properties is only applied to devices which do have the
|
||||
@@ -1483,10 +1488,6 @@ Blacklisting by missing properties is only applied to devices which do have the
|
||||
property specified by \fIuid_attribute\fR (e.g. \fIID_SERIAL\fR)
|
||||
set. Previously, it was applied to every device, possibly causing devices to be
|
||||
blacklisted because of temporary I/O error conditions.
|
||||
|
|
@ -74,10 +73,10 @@ index d6b8c7f6..689d09aa 100644
|
|||
.TP
|
||||
.B protocol
|
||||
diff --git a/tests/blacklist.c b/tests/blacklist.c
|
||||
index 882aa3a1..6a22b660 100644
|
||||
index ab3da619..52ae03e0 100644
|
||||
--- a/tests/blacklist.c
|
||||
+++ b/tests/blacklist.c
|
||||
@@ -375,9 +375,8 @@ static void test_property_missing(void **state)
|
||||
@@ -371,9 +371,8 @@ static void test_property_missing(void **state)
|
||||
{
|
||||
static struct udev_device udev = { "sdb", { "ID_FOO", "ID_BAZ", "ID_BAR", "ID_SERIAL", NULL } };
|
||||
conf.blist_property = blist_property_wwn;
|
||||
|
|
@ -88,7 +87,7 @@ index 882aa3a1..6a22b660 100644
|
|||
assert_int_equal(filter_property(&conf, &udev, 3, "ID_BLAH"),
|
||||
MATCH_NOTHING);
|
||||
assert_int_equal(filter_property(&conf, &udev, 3, ""),
|
||||
@@ -469,9 +468,7 @@ static void test_filter_path_missing1(void **state)
|
||||
@@ -465,9 +464,7 @@ static void test_filter_path_missing1(void **state)
|
||||
conf.blist_device = blist_device_foo_bar;
|
||||
conf.blist_protocol = blist_protocol_fcp;
|
||||
conf.blist_wwid = blist_wwid_xyzzy;
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Wed, 12 May 2021 23:06:51 +0200
|
||||
Subject: [PATCH] multipathd: fix compilation issue with liburcu < 0.8
|
||||
|
||||
To avoid race conditions with pending RCU callbacks on exit, it's
|
||||
necessary to call rcu_barrier() in cleanup_rcu() (see
|
||||
https://lists.lttng.org/pipermail/lttng-dev/2021-May/029958.html and
|
||||
follow-ups).
|
||||
|
||||
rcu_barrier() is only available in User-space RCU v0.8 and newer.
|
||||
Fix it by reverting 5d0dae6 ("multipathd: Fix liburcu memory leak")
|
||||
if an older version of liburcu is detected.
|
||||
|
||||
Fixes: 5d0dae6 ("multipathd: Fix liburcu memory leak")
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/Makefile | 2 ++
|
||||
multipathd/main.c | 17 +++++++++++++++--
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/multipathd/Makefile b/multipathd/Makefile
|
||||
index d053c1ed..393b6cbb 100644
|
||||
--- a/multipathd/Makefile
|
||||
+++ b/multipathd/Makefile
|
||||
@@ -16,6 +16,8 @@ LDFLAGS += $(BIN_LDFLAGS)
|
||||
LIBDEPS += -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \
|
||||
-L$(mpathcmddir) -lmpathcmd -ludev -ldl -lurcu -lpthread \
|
||||
-ldevmapper -lreadline
|
||||
+CFLAGS += $(shell $(PKGCONFIG) --modversion liburcu 2>/dev/null | \
|
||||
+ awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }')
|
||||
|
||||
ifdef SYSTEMD
|
||||
CFLAGS += -DUSE_SYSTEMD=$(SYSTEMD)
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 102946bf..c34fd9c8 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -3031,6 +3031,10 @@ static void cleanup_threads(void)
|
||||
pthread_attr_destroy(&waiter_attr);
|
||||
}
|
||||
|
||||
+#ifndef URCU_VERSION
|
||||
+# define URCU_VERSION 0
|
||||
+#endif
|
||||
+#if (URCU_VERSION >= 0x000800)
|
||||
/*
|
||||
* Use a non-default call_rcu_data for child().
|
||||
*
|
||||
@@ -3040,6 +3044,9 @@ static void cleanup_threads(void)
|
||||
* can't be joined with pthread_join(), leaving a memory leak.
|
||||
*
|
||||
* Therefore we create our own, which can be destroyed and joined.
|
||||
+ * The cleanup handler needs to call rcu_barrier(), which is only
|
||||
+ * available in user-space RCU v0.8 and newer. See
|
||||
+ * https://lists.lttng.org/pipermail/lttng-dev/2021-May/029958.html
|
||||
*/
|
||||
static struct call_rcu_data *setup_rcu(void)
|
||||
{
|
||||
@@ -3072,6 +3079,7 @@ static void cleanup_rcu(void)
|
||||
}
|
||||
rcu_unregister_thread();
|
||||
}
|
||||
+#endif /* URCU_VERSION */
|
||||
|
||||
static void cleanup_child(void)
|
||||
{
|
||||
@@ -3116,9 +3124,14 @@ child (__attribute__((unused)) void *param)
|
||||
init_unwinder();
|
||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||
signal_init();
|
||||
+#if (URCU_VERSION >= 0x000800)
|
||||
mp_rcu_data = setup_rcu();
|
||||
-
|
||||
- if (atexit(cleanup_rcu) || atexit(cleanup_child))
|
||||
+ if (atexit(cleanup_rcu))
|
||||
+ fprintf(stderr, "failed to register RCU cleanup handler\n");
|
||||
+#else
|
||||
+ rcu_init();
|
||||
+#endif
|
||||
+ if (atexit(cleanup_child))
|
||||
fprintf(stderr, "failed to register cleanup handlers\n");
|
||||
|
||||
setup_thread_attr(&misc_attr, 64 * 1024, 0);
|
||||
137
0003-RH-don-t-start-without-a-config-file.patch
Normal file
137
0003-RH-don-t-start-without-a-config-file.patch
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
From 5613e07ce9cabf2fdc402f6f102cc54bd1059800 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 15 Oct 2014 10:39:30 -0500
|
||||
Subject: [PATCH] RH: don't start without a config file
|
||||
|
||||
If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist
|
||||
all devices when running multipath. A completely blank configuration file
|
||||
is almost never what users want. Also, people may have the multipath
|
||||
packages installed but don't want to use them. This patch provides a
|
||||
simple way to disable multipath. Simply removing or renaming
|
||||
/etc/multipath.conf will keep multipath from doing anything.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/config.c | 13 +++++++++++++
|
||||
libmultipath/config.h | 1 +
|
||||
multipath/main.c | 6 ++++++
|
||||
multipath/multipath.rules.in | 1 +
|
||||
multipathd/multipathd.8.in | 2 ++
|
||||
multipathd/multipathd.service.in | 1 +
|
||||
multipathd/multipathd.socket.in | 1 +
|
||||
7 files changed, 25 insertions(+)
|
||||
|
||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||
index 8b424d18..b8317f4d 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -937,6 +937,19 @@ int init_config__ (const char *file, struct config *conf)
|
||||
}
|
||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
|
||||
validate_pctable(conf->overrides, 0, file);
|
||||
+ } else {
|
||||
+ condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
||||
+ if (conf->blist_devnode == NULL) {
|
||||
+ conf->blist_devnode = vector_alloc();
|
||||
+ if (!conf->blist_devnode) {
|
||||
+ condlog(0, "cannot allocate blacklist\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+ if (store_ble(conf->blist_devnode, ".*", ORIGIN_NO_CONFIG)) {
|
||||
+ condlog(0, "cannot store default no-config blacklist\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
}
|
||||
|
||||
conf->processed_main_config = 1;
|
||||
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||
index 5b4ebf8c..2302eacc 100644
|
||||
--- a/libmultipath/config.h
|
||||
+++ b/libmultipath/config.h
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#define ORIGIN_DEFAULT 0
|
||||
#define ORIGIN_CONFIG 1
|
||||
+#define ORIGIN_NO_CONFIG 2
|
||||
|
||||
enum devtypes {
|
||||
DEV_NONE,
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index f2adcdeb..31012874 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -834,11 +834,14 @@ main (int argc, char *argv[])
|
||||
char *dev = NULL;
|
||||
struct config *conf;
|
||||
bool enable_foreign = false;
|
||||
+ bool have_config;
|
||||
+ struct stat buf;
|
||||
|
||||
libmultipath_init();
|
||||
if (atexit(dm_lib_exit) || atexit(libmultipath_exit))
|
||||
condlog(1, "failed to register cleanup handler for libmultipath: %m");
|
||||
logsink = LOGSINK_STDERR_WITH_TIME;
|
||||
+ have_config = (stat(DEFAULT_CONFIGFILE, &buf) == 0);
|
||||
if (init_config(DEFAULT_CONFIGFILE))
|
||||
exit(RTVL_FAIL);
|
||||
if (atexit(uninit_config))
|
||||
@@ -1092,6 +1095,9 @@ main (int argc, char *argv[])
|
||||
while ((r = configure(conf, cmd, dev_type, dev)) == RTVL_RETRY)
|
||||
condlog(3, "restart multipath configuration process");
|
||||
|
||||
+ if (!have_config && r == RTVL_OK &&
|
||||
+ (cmd == CMD_LIST_SHORT || cmd == CMD_LIST_LONG))
|
||||
+ r = RTVL_FAIL;
|
||||
out:
|
||||
put_multipath_config(conf);
|
||||
if (dev)
|
||||
diff --git a/multipath/multipath.rules.in b/multipath/multipath.rules.in
|
||||
index 2ac1972f..cc248231 100644
|
||||
--- a/multipath/multipath.rules.in
|
||||
+++ b/multipath/multipath.rules.in
|
||||
@@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath"
|
||||
ENV{nompath}=="?*", GOTO="end_mpath"
|
||||
IMPORT{cmdline}="multipath"
|
||||
ENV{multipath}=="off", GOTO="end_mpath"
|
||||
+TEST!="/etc/multipath.conf", GOTO="end_mpath"
|
||||
|
||||
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
||||
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
|
||||
diff --git a/multipathd/multipathd.8.in b/multipathd/multipathd.8.in
|
||||
index 8815e099..342e363e 100644
|
||||
--- a/multipathd/multipathd.8.in
|
||||
+++ b/multipathd/multipathd.8.in
|
||||
@@ -49,6 +49,8 @@ map regains its maximum performance and redundancy.
|
||||
With the \fB-k\fR option, \fBmultipathd\fR acts as a client utility that
|
||||
sends commands to a running instance of the multipathd daemon (see
|
||||
\fBCOMMANDS\fR below).
|
||||
+
|
||||
+In this Linux distribution, multipathd does not run unless a /etc/multipath.conf file exists.
|
||||
.
|
||||
.
|
||||
.\" ----------------------------------------------------------------------------
|
||||
diff --git a/multipathd/multipathd.service.in b/multipathd/multipathd.service.in
|
||||
index eb58943c..ab166435 100644
|
||||
--- a/multipathd/multipathd.service.in
|
||||
+++ b/multipathd/multipathd.service.in
|
||||
@@ -6,6 +6,7 @@ Wants=systemd-udevd-kernel.socket multipathd-queueing.service @MODPROBE_UNIT@
|
||||
After=systemd-udevd-kernel.socket @MODPROBE_UNIT@
|
||||
After=multipathd.socket systemd-remount-fs.service
|
||||
Before=initrd-cleanup.service
|
||||
+ConditionPathExists=/etc/multipath.conf
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
Conflicts=initrd-cleanup.service
|
||||
diff --git a/multipathd/multipathd.socket.in b/multipathd/multipathd.socket.in
|
||||
index 11002fce..5ed24757 100644
|
||||
--- a/multipathd/multipathd.socket.in
|
||||
+++ b/multipathd/multipathd.socket.in
|
||||
@@ -1,6 +1,7 @@
|
||||
[Unit]
|
||||
Description=multipathd control socket
|
||||
DefaultDependencies=no
|
||||
+ConditionPathExists=/etc/multipath.conf
|
||||
ConditionKernelCommandLine=!nompath
|
||||
ConditionKernelCommandLine=!multipath=off
|
||||
ConditionVirtualization=!container
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:54 -0500
|
||||
Subject: [PATCH] multipathd: don't fail to remove path once the map is removed
|
||||
|
||||
In ev_remove_path(), if update_mpp_paths() fails, we delete the entire
|
||||
map. However, since update_mpp_paths() happens before we call
|
||||
set_path_removed(), pp->initialized isn't set to INIT_REMOVED, so
|
||||
remove_map_and_stop_waiter() doesn't remove the path when in removes the
|
||||
map. But with the map removed, there's nothing to keep us from removing
|
||||
the path.
|
||||
|
||||
Call set_path_removed() before update_mpp_paths() to avoid the odd case
|
||||
of ev_remove_path() removing the map but not the path.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
libmultipath/structs_vec.c | 4 ++--
|
||||
multipathd/main.c | 13 ++++++++-----
|
||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
|
||||
index d242c06b..75390198 100644
|
||||
--- a/libmultipath/structs_vec.c
|
||||
+++ b/libmultipath/structs_vec.c
|
||||
@@ -45,8 +45,8 @@ int update_mpp_paths(struct multipath *mpp, vector pathvec)
|
||||
|
||||
/*
|
||||
* Avoid adding removed paths to the map again
|
||||
- * when we reload it. Such paths may exist if
|
||||
- * domap fails in ev_remove_path().
|
||||
+ * when we reload it. Such paths may exist in
|
||||
+ * ev_remove_paths() or if it returns failure.
|
||||
*/
|
||||
pp1 = find_path_by_devt(pathvec, pp->dev_t);
|
||||
if (pp1 && pp->initialized != INIT_REMOVED &&
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index c34fd9c8..2062bc10 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1199,6 +1199,13 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
* avoid referring to the map of an orphaned path
|
||||
*/
|
||||
if ((mpp = pp->mpp)) {
|
||||
+ /*
|
||||
+ * Mark the path as removed. In case of success, we
|
||||
+ * will delete it for good. Otherwise, it will be deleted
|
||||
+ * later, unless all attempts to reload this map fail.
|
||||
+ */
|
||||
+ set_path_removed(pp);
|
||||
+
|
||||
/*
|
||||
* transform the mp->pg vector of vectors of paths
|
||||
* into a mp->params string to feed the device-mapper
|
||||
@@ -1210,13 +1217,9 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Mark the path as removed. In case of success, we
|
||||
- * will delete it for good. Otherwise, it will be deleted
|
||||
- * later, unless all attempts to reload this map fail.
|
||||
- * Note: we have to explicitly remove pp from mpp->paths,
|
||||
+ * we have to explicitly remove pp from mpp->paths,
|
||||
* update_mpp_paths() doesn't do that.
|
||||
*/
|
||||
- set_path_removed(pp);
|
||||
i = find_slot(mpp->paths, pp);
|
||||
if (i != -1)
|
||||
vector_del_slot(mpp->paths, i);
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From 283b5dd645663a2cf16f2813581772d7a84db6ad Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 25 Jan 2019 14:54:56 -0600
|
||||
Subject: [PATCH] RH: Fix nvme function missing argument
|
||||
|
|
@ -12,10 +12,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmultipath/nvme/argconfig.h b/libmultipath/nvme/argconfig.h
|
||||
index adb192b6..bfd10ef8 100644
|
||||
index b3caa7be..f91504c9 100644
|
||||
--- a/libmultipath/nvme/argconfig.h
|
||||
+++ b/libmultipath/nvme/argconfig.h
|
||||
@@ -76,7 +76,7 @@ struct argconfig_commandline_options {
|
||||
@@ -63,7 +63,7 @@ struct argconfig_commandline_options {
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:55 -0500
|
||||
Subject: [PATCH] multipathd: remove duplicate orphan_paths in flush_map
|
||||
|
||||
remove_map_and_stop_waiter() already calls orphan_paths() so flush_map()
|
||||
doesn't need to call orphan_paths() before calling
|
||||
remove_map_and_stop_waiter().
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/main.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 2062bc10..266d6b44 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -660,7 +660,6 @@ flush_map(struct multipath * mpp, struct vectors * vecs, int nopaths)
|
||||
else
|
||||
condlog(2, "%s: map flushed", mpp->alias);
|
||||
|
||||
- orphan_paths(vecs->pathvec, mpp, "map flushed");
|
||||
remove_map_and_stop_waiter(mpp, vecs);
|
||||
|
||||
return 0;
|
||||
67
0005-RH-use-rpm-optflags-if-present.patch
Normal file
67
0005-RH-use-rpm-optflags-if-present.patch
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
From bf46f8029998498045bb055415ba3ff515c79eaa Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 19 Apr 2017 06:10:01 -0500
|
||||
Subject: [PATCH] RH: use rpm optflags if present
|
||||
|
||||
Use the passed in optflags when compiling as an RPM, and keep the
|
||||
default flags as close as possible to the current fedora flags, while
|
||||
still being generic.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 25 ++++++++++++++++++-------
|
||||
1 file changed, 18 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index ead89030..03aee175 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -102,17 +102,29 @@ SYSTEMD_LIBDEPS := $(if $(SYSTEMD),$(if $(shell test $(SYSTEMD) -gt 209 && echo
|
||||
MODPROBE_UNIT := $(shell test "0$(SYSTEMD)" -lt 245 2>/dev/null || \
|
||||
echo "modprobe@dm_multipath.service")
|
||||
|
||||
-OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
+ifndef RPM_OPT_FLAGS
|
||||
+ OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4 \
|
||||
+ -Wall $(FORTIFY_OPT) -fexceptions -grecord-gcc-switches \
|
||||
+ -fasynchronous-unwind-tables
|
||||
+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1)
|
||||
+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
|
||||
+ endif
|
||||
+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-annobin-cc1 && echo 1),1)
|
||||
+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
|
||||
+ endif
|
||||
+else
|
||||
+ OPTFLAGS := $(RPM_OPT_FLAGS) --param=ssp-buffer-size=4
|
||||
+endif
|
||||
|
||||
# Set WARN_ONLY=1 to avoid compilation erroring out due to warnings. Useful during development.
|
||||
WARN_ONLY :=
|
||||
ERROR := $(if $(WARN_ONLY),,error=)
|
||||
WERROR := $(if $(WARN_ONLY),,-Werror)
|
||||
-WARNFLAGS := $(WERROR) -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -W$(ERROR)implicit-int \
|
||||
+WARNFLAGS := $(WERROR) -Wextra -Wformat=2 $(WFORMATOVERFLOW) -W$(ERROR)implicit-int \
|
||||
-W$(ERROR)implicit-function-declaration -W$(ERROR)format-security \
|
||||
- $(WNOCLOBBERED) -W$(ERROR)cast-qual $(ERROR_DISCARDED_QUALIFIERS) $(W_URCU_TYPE_LIMITS)
|
||||
+ $(WNOCLOBBERED) -W$(ERROR)cast-qual $(ERROR_DISCARDED_QUALIFIERS) $(W_URCU_TYPE_LIMITS) -Wstrict-prototypes
|
||||
|
||||
-CPPFLAGS := $(FORTIFY_OPT) $(CPPFLAGS) $(D_URCU_VERSION) \
|
||||
+CPPFLAGS := $(CPPFLAGS) $(D_URCU_VERSION) \
|
||||
-D_FILE_OFFSET_BITS=64 \
|
||||
-DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(TGTDIR)$(plugindir)\" \
|
||||
-DRUNTIME_DIR=\"$(runtimedir)\" -DCONFIG_DIR=\"$(TGTDIR)$(configdir)\" \
|
||||
@@ -121,12 +133,11 @@ CPPFLAGS := $(FORTIFY_OPT) $(CPPFLAGS) $(D_URCU_VERSION) \
|
||||
-DABSTRACT_SOCKET=\"$(abstract_socket)\" -DPATHNAME_SOCKET=\"$(pathname_socket)\" \
|
||||
-DWSTRINGOP_TRUNCATION=$(if $(WSTRINGOP_TRUNCATION),1,0) \
|
||||
-MMD -MP
|
||||
-CFLAGS := -std=$(C_STD) $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
||||
- -fexceptions
|
||||
+CFLAGS := -std=$(C_STD) $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe
|
||||
BIN_CFLAGS := -fPIE -DPIE
|
||||
LIB_CFLAGS := -fPIC
|
||||
SHARED_FLAGS := -shared
|
||||
-LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs
|
||||
+LDFLAGS := $(LDFLAGS) $(RPM_LD_FLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs
|
||||
BIN_LDFLAGS := -pie
|
||||
|
||||
# Source code directories. Don't modify.
|
||||
|
|
@ -1,226 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:56 -0500
|
||||
Subject: [PATCH] multipathd: fix ev_remove_path return code handling
|
||||
|
||||
When ev_remove_path() returned success, callers assumed that the path
|
||||
(and possibly the map) had been removed. When ev_remove_path() returned
|
||||
failure, callers assumed that the path had not been removed. However,
|
||||
the path could be removed on both success or failure. This could cause
|
||||
callers to dereference the path after it was removed.
|
||||
|
||||
To deal with this, make ev_remove_path() return a different symbolic
|
||||
value for each outcome, and make the callers react appropriately for
|
||||
the different values. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 24 +++++++++++++++++++++--
|
||||
multipathd/main.c | 41 ++++++++++++++++++++-------------------
|
||||
multipathd/main.h | 14 +++++++++++++
|
||||
3 files changed, 57 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 1de6ad8e..6765fcf0 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -752,7 +752,8 @@ cli_add_path (void * v, char ** reply, int * len, void * data)
|
||||
/* Have the checker reinstate this path asap */
|
||||
pp->tick = 1;
|
||||
return 0;
|
||||
- } else if (!ev_remove_path(pp, vecs, true))
|
||||
+ } else if (ev_remove_path(pp, vecs, true) &
|
||||
+ REMOVE_PATH_SUCCESS)
|
||||
/* Path removed in ev_remove_path() */
|
||||
pp = NULL;
|
||||
else {
|
||||
@@ -813,6 +814,7 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
struct vectors * vecs = (struct vectors *)data;
|
||||
char * param = get_keyparam(v, PATH);
|
||||
struct path *pp;
|
||||
+ int ret;
|
||||
|
||||
param = convert_dev(param, 1);
|
||||
condlog(2, "%s: remove path (operator)", param);
|
||||
@@ -821,7 +823,25 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
condlog(0, "%s: path already removed", param);
|
||||
return 1;
|
||||
}
|
||||
- return ev_remove_path(pp, vecs, 1);
|
||||
+ ret = ev_remove_path(pp, vecs, 1);
|
||||
+ if (ret == REMOVE_PATH_DELAY) {
|
||||
+ *reply = strdup("delayed\n");
|
||||
+ if (*reply)
|
||||
+ *len = strlen(*reply) + 1;
|
||||
+ else {
|
||||
+ *len = 0;
|
||||
+ ret = REMOVE_PATH_FAILURE;
|
||||
+ }
|
||||
+ } else if (ret == REMOVE_PATH_MAP_ERROR) {
|
||||
+ *reply = strdup("map reload error. removed\n");
|
||||
+ if (*reply)
|
||||
+ *len = strlen(*reply) + 1;
|
||||
+ else {
|
||||
+ *len = 0;
|
||||
+ ret = REMOVE_PATH_FAILURE;
|
||||
+ }
|
||||
+ }
|
||||
+ return (ret == REMOVE_PATH_FAILURE);
|
||||
}
|
||||
|
||||
int
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 266d6b44..26a4e44e 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -838,7 +838,7 @@ handle_path_wwid_change(struct path *pp, struct vectors *vecs)
|
||||
return;
|
||||
|
||||
udd = udev_device_ref(pp->udev);
|
||||
- if (ev_remove_path(pp, vecs, 1) != 0 && pp->mpp) {
|
||||
+ if (!(ev_remove_path(pp, vecs, 1) & REMOVE_PATH_SUCCESS) && pp->mpp) {
|
||||
pp->dmstate = PSTATE_FAILED;
|
||||
dm_fail_path(pp->mpp->alias, pp->dev_t);
|
||||
}
|
||||
@@ -948,8 +948,8 @@ uev_add_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
* Make another attempt to remove the path
|
||||
*/
|
||||
pp->mpp = prev_mpp;
|
||||
- ret = ev_remove_path(pp, vecs, true);
|
||||
- if (ret != 0) {
|
||||
+ if (!(ev_remove_path(pp, vecs, true) &
|
||||
+ REMOVE_PATH_SUCCESS)) {
|
||||
/*
|
||||
* Failure in ev_remove_path will keep
|
||||
* path in pathvec in INIT_REMOVED state
|
||||
@@ -960,6 +960,7 @@ uev_add_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
dm_fail_path(pp->mpp->alias, pp->dev_t);
|
||||
condlog(1, "%s: failed to re-add path still mapped in %s",
|
||||
pp->dev, pp->mpp->alias);
|
||||
+ ret = 1;
|
||||
} else if (r == PATHINFO_OK)
|
||||
/*
|
||||
* Path successfully freed, move on to
|
||||
@@ -1167,7 +1168,6 @@ static int
|
||||
uev_remove_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
{
|
||||
struct path *pp;
|
||||
- int ret;
|
||||
|
||||
condlog(3, "%s: remove path (uevent)", uev->kernel);
|
||||
delete_foreign(uev->udev);
|
||||
@@ -1177,21 +1177,18 @@ uev_remove_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
pthread_testcancel();
|
||||
pp = find_path_by_dev(vecs->pathvec, uev->kernel);
|
||||
if (pp)
|
||||
- ret = ev_remove_path(pp, vecs, need_do_map);
|
||||
+ ev_remove_path(pp, vecs, need_do_map);
|
||||
lock_cleanup_pop(vecs->lock);
|
||||
- if (!pp) {
|
||||
- /* Not an error; path might have been purged earlier */
|
||||
+ if (!pp) /* Not an error; path might have been purged earlier */
|
||||
condlog(0, "%s: path already removed", uev->kernel);
|
||||
- return 0;
|
||||
- }
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
{
|
||||
struct multipath * mpp;
|
||||
- int i, retval = 0;
|
||||
+ int i, retval = REMOVE_PATH_SUCCESS;
|
||||
char params[PARAMS_SIZE] = {0};
|
||||
|
||||
/*
|
||||
@@ -1245,7 +1242,6 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
condlog(2, "%s: removed map after"
|
||||
" removing all paths",
|
||||
alias);
|
||||
- retval = 0;
|
||||
/* flush_map() has freed the path */
|
||||
goto out;
|
||||
}
|
||||
@@ -1262,11 +1258,14 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
|
||||
if (mpp->wait_for_udev) {
|
||||
mpp->wait_for_udev = 2;
|
||||
+ retval = REMOVE_PATH_DELAY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if (!need_do_map)
|
||||
+ if (!need_do_map) {
|
||||
+ retval = REMOVE_PATH_DELAY;
|
||||
goto out;
|
||||
+ }
|
||||
/*
|
||||
* reload the map
|
||||
*/
|
||||
@@ -1275,7 +1274,7 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
condlog(0, "%s: failed in domap for "
|
||||
"removal of path %s",
|
||||
mpp->alias, pp->dev);
|
||||
- retval = 1;
|
||||
+ retval = REMOVE_PATH_FAILURE;
|
||||
} else {
|
||||
/*
|
||||
* update our state from kernel
|
||||
@@ -1283,12 +1282,12 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
char devt[BLK_DEV_SIZE];
|
||||
|
||||
strlcpy(devt, pp->dev_t, sizeof(devt));
|
||||
+
|
||||
+ /* setup_multipath will free the path
|
||||
+ * regardless of whether it succeeds or
|
||||
+ * fails */
|
||||
if (setup_multipath(vecs, mpp))
|
||||
- return 1;
|
||||
- /*
|
||||
- * Successful map reload without this path:
|
||||
- * sync_map_state() will free it.
|
||||
- */
|
||||
+ return REMOVE_PATH_MAP_ERROR;
|
||||
sync_map_state(mpp);
|
||||
|
||||
condlog(2, "%s: path removed from map %s",
|
||||
@@ -1304,8 +1303,10 @@ out:
|
||||
return retval;
|
||||
|
||||
fail:
|
||||
+ condlog(0, "%s: error removing path. removing map %s", pp->dev,
|
||||
+ mpp->alias);
|
||||
remove_map_and_stop_waiter(mpp, vecs);
|
||||
- return 1;
|
||||
+ return REMOVE_PATH_MAP_ERROR;
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/multipathd/main.h b/multipathd/main.h
|
||||
index ddd953f9..bc1f938f 100644
|
||||
--- a/multipathd/main.h
|
||||
+++ b/multipathd/main.h
|
||||
@@ -13,6 +13,20 @@ enum daemon_status {
|
||||
DAEMON_STATUS_SIZE,
|
||||
};
|
||||
|
||||
+enum remove_path_result {
|
||||
+ REMOVE_PATH_FAILURE = 0x0, /* path could not be removed. It is still
|
||||
+ * part of the kernel map, but its state
|
||||
+ * is set to INIT_REMOVED, and it will be
|
||||
+ * removed at the next possible occassion */
|
||||
+ REMOVE_PATH_SUCCESS = 0x1, /* path was removed */
|
||||
+ REMOVE_PATH_DELAY = 0x2, /* path is set to be removed later. it
|
||||
+ * currently still exists and is part of the
|
||||
+ * kernel map */
|
||||
+ REMOVE_PATH_MAP_ERROR = 0x5, /* map was removed because of error. value
|
||||
+ * includes REMOVE_PATH_SUCCESS bit
|
||||
+ * because the path was also removed */
|
||||
+};
|
||||
+
|
||||
struct prout_param_descriptor;
|
||||
struct prin_resp;
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From 29e5c6d6e2177e73d1be2ed2af66c1007487bf60 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 16 Oct 2014 15:49:01 -0500
|
||||
Subject: [PATCH] RH: add mpathconf
|
||||
|
|
@ -10,22 +10,48 @@ command line. But, mostly it is used to get a multipath.conf file
|
|||
with the OS defaults, and to enable and disable multipathing via
|
||||
a single command.
|
||||
|
||||
Co-authored-by: Paul Donohue <git@PaulSD.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/config.c | 2 +
|
||||
multipath/Makefile | 5 +
|
||||
multipath/mpathconf | 561 ++++++++++++++++++++++++++++++++++++++++++
|
||||
multipath/mpathconf.8 | 135 ++++++++++
|
||||
4 files changed, 703 insertions(+)
|
||||
.github/actions/spelling/expect.txt | 3 +
|
||||
libmultipath/config.c | 2 +
|
||||
multipath/Makefile | 4 +
|
||||
multipath/mpathconf | 658 ++++++++++++++++++++++++++++
|
||||
multipath/mpathconf.8 | 151 +++++++
|
||||
5 files changed, 818 insertions(+)
|
||||
create mode 100644 multipath/mpathconf
|
||||
create mode 100644 multipath/mpathconf.8
|
||||
|
||||
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
|
||||
index a5856bcc..5c9113ba 100644
|
||||
--- a/.github/actions/spelling/expect.txt
|
||||
+++ b/.github/actions/spelling/expect.txt
|
||||
@@ -131,9 +131,11 @@ Marzinski
|
||||
misdetection
|
||||
mpath
|
||||
mpathb
|
||||
+mpathconf
|
||||
mpathpersist
|
||||
mpathvalid
|
||||
msecs
|
||||
+multipathable
|
||||
multipathc
|
||||
multipathd
|
||||
multipathed
|
||||
@@ -154,6 +156,7 @@ ontap
|
||||
OOM
|
||||
opensvc
|
||||
OPTFLAGS
|
||||
+outfile
|
||||
paramp
|
||||
partx
|
||||
pathgroup
|
||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||
index 5f35c3d3..cee3bbb7 100644
|
||||
index b8317f4d..0bbaa981 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -897,6 +897,8 @@ int _init_config (const char *file, struct config *conf)
|
||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
|
||||
@@ -939,6 +939,8 @@ int init_config__ (const char *file, struct config *conf)
|
||||
validate_pctable(conf->overrides, 0, file);
|
||||
} else {
|
||||
condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
||||
+ condlog(0, "You can run \"/sbin/mpathconf --enable\" to create");
|
||||
|
|
@ -34,45 +60,46 @@ index 5f35c3d3..cee3bbb7 100644
|
|||
conf->blist_devnode = vector_alloc();
|
||||
if (!conf->blist_devnode) {
|
||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
||||
index b9bbb3cf..e720c7f6 100644
|
||||
index 2ea9e528..3dc241cc 100644
|
||||
--- a/multipath/Makefile
|
||||
+++ b/multipath/Makefile
|
||||
@@ -18,10 +18,12 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
|
||||
$(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) $(LIBDEPS)
|
||||
$(GZIP) $(EXEC).8 > $(EXEC).8.gz
|
||||
$(GZIP) $(EXEC).conf.5 > $(EXEC).conf.5.gz
|
||||
+ $(GZIP) mpathconf.8 > mpathconf.8.gz
|
||||
|
||||
@@ -24,6 +24,7 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
|
||||
install:
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
|
||||
$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
|
||||
+ $(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
|
||||
$(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
@@ -29,13 +31,16 @@ install:
|
||||
$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
|
||||
$(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5.gz $(DESTDIR)$(man5dir)
|
||||
+ $(INSTALL_PROGRAM) -m 644 mpathconf.8.gz $(DESTDIR)$(man8dir)
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
|
||||
+ $(Q)$(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 99-z-dm-mpath-late.rules $(DESTDIR)$(udevrulesdir)
|
||||
@@ -32,6 +33,7 @@ install:
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8
|
||||
+ $(Q)$(INSTALL_PROGRAM) -m 644 mpathconf.8 $(DESTDIR)$(mandir)/man8
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man5
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(mandir)/man5
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir)
|
||||
@@ -46,12 +48,14 @@ endif
|
||||
|
||||
uninstall:
|
||||
$(RM) $(DESTDIR)$(bindir)/$(EXEC)
|
||||
$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
|
||||
$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
+ $(RM) $(DESTDIR)$(bindir)/mpathconf
|
||||
$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
|
||||
$(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
|
||||
+ $(RM) $(DESTDIR)$(man8dir)/mpathconf.8.gz
|
||||
$(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC)
|
||||
+ $(Q)$(RM) $(DESTDIR)$(bindir)/mpathconf
|
||||
$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/99-z-dm-mpath-late.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
|
||||
$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
|
||||
$(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8
|
||||
+ $(Q)$(RM) $(DESTDIR)$(mandir)/man8/mpathconf.8
|
||||
$(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5
|
||||
$(Q)$(RM) $(DESTDIR)$(tmpfilesdir)/multipath.conf
|
||||
|
||||
clean: dep_clean
|
||||
$(RM) core *.o $(EXEC) *.gz
|
||||
diff --git a/multipath/mpathconf b/multipath/mpathconf
|
||||
new file mode 100644
|
||||
index 00000000..039b3e47
|
||||
index 00000000..ce430075
|
||||
--- /dev/null
|
||||
+++ b/multipath/mpathconf
|
||||
@@ -0,0 +1,561 @@
|
||||
@@ -0,0 +1,658 @@
|
||||
+#!/bin/bash
|
||||
+#
|
||||
+# Copyright (C) 2010 Red Hat, Inc. All rights reserved.
|
||||
|
|
@ -92,7 +119,7 @@ index 00000000..039b3e47
|
|||
+# This program was largely ripped off from lvmconf
|
||||
+#
|
||||
+
|
||||
+unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST
|
||||
+unset ENABLE FIND FRIENDLY PROPERTY FOREIGN MODULE MULTIPATHD HAVE_DISABLE HAVE_WWID_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_EXCEPTIONS HAVE_DEFAULTS HAVE_FRIENDLY HAVE_PROPERTY HAVE_FOREIGN HAVE_MULTIPATHD HAVE_MODULE HAVE_OUTFILE SHOW_STATUS CHANGED_CONFIG WWID_LIST HAVE_OPTION OPTION_NAME OPTION_VALUE HAVE_RECHECK_WWID RECHECK_WWID
|
||||
+
|
||||
+DEFAULT_CONFIG="# device-mapper-multipath configuration file
|
||||
+
|
||||
|
|
@ -106,12 +133,7 @@ index 00000000..039b3e47
|
|||
+
|
||||
+defaults {
|
||||
+ user_friendly_names yes
|
||||
+ find_multipaths yes
|
||||
+ enable_foreign \"^$\"
|
||||
+}
|
||||
+
|
||||
+blacklist_exceptions {
|
||||
+ property \"(SCSI_IDENT_|ID_WWN)\"
|
||||
+ find_multipaths on
|
||||
+}"
|
||||
+
|
||||
+CONFIGFILE="/etc/multipath.conf"
|
||||
|
|
@ -129,9 +151,11 @@ index 00000000..039b3e47
|
|||
+ echo "Disable: --disable"
|
||||
+ echo "Only allow certain wwids (instead of enable): --allow <WWID>"
|
||||
+ echo "Set user_friendly_names (Default y): --user_friendly_names <y|n>"
|
||||
+ echo "Set find_multipaths (Default y): --find_multipaths <yes|no|strict|greedy|smart>"
|
||||
+ echo "Set default property blacklist (Default y): --property_blacklist <y|n>"
|
||||
+ echo "Set find_multipaths (Default on): --find_multipaths <on|yes|y|off|no|n|strict|greedy|smart>"
|
||||
+ echo "Set default property blacklist (Default n): --property_blacklist <y|n>"
|
||||
+ echo "Set enable_foreign to show foreign devices (Default n): --enable_foreign <y|n>"
|
||||
+ echo "Set recheck_wwid (Defaut n): --recheck_wwid <y|n>"
|
||||
+ echo "Add/Change/Remove option in defaults section: --option <option_name>:<value>"
|
||||
+ echo "Load the dm-multipath modules on enable (Default y): --with_module <y|n>"
|
||||
+ echo "start/stop/reload multipathd (Default n): --with_multipathd <y|n>"
|
||||
+ echo "select output file (Default /etc/multipath.conf): --outfile <FILE>"
|
||||
|
|
@ -224,6 +248,15 @@ index 00000000..039b3e47
|
|||
+ exit 1
|
||||
+ fi
|
||||
+ ;;
|
||||
+ --recheck_wwid)
|
||||
+ if [ -n "$2" ]; then
|
||||
+ RECHECK_WWID=$2
|
||||
+ shift 2
|
||||
+ else
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ ;;
|
||||
+ --find_multipaths)
|
||||
+ if [ -n "$2" ]; then
|
||||
+ FIND=$2
|
||||
|
|
@ -242,6 +275,20 @@ index 00000000..039b3e47
|
|||
+ exit 1
|
||||
+ fi
|
||||
+ ;;
|
||||
+ --option)
|
||||
+ if [ -n "$2" ]; then
|
||||
+ OPTION_NAME=$(echo $2 | cut -s -f1 -d:)
|
||||
+ OPTION_VALUE=$(echo $2 | cut -s -f2 -d:)
|
||||
+ if [ -z "$OPTION_NAME" ]; then
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ shift 2
|
||||
+ else
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ ;;
|
||||
+ --enable_foreign)
|
||||
+ if [ -n "$2" ]; then
|
||||
+ FOREIGN=$2
|
||||
|
|
@ -288,23 +335,31 @@ index 00000000..039b3e47
|
|||
+
|
||||
+function validate_args
|
||||
+{
|
||||
+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" ]; then
|
||||
+ if [ "$ENABLE" = "0" ] && [ -n "$FRIENDLY" -o -n "$FIND" -o -n "$PROPERTY" -o -n "$MODULE" -o -n "$FOREIGN" -o -n "$OPTION_NAME" -o -n "$RECHECK_WWID" ]; then
|
||||
+ echo "ignoring extra parameters on disable"
|
||||
+ FRIENDLY=""
|
||||
+ FIND=""
|
||||
+ PROPERTY=""
|
||||
+ MODULE=""
|
||||
+ FOREIGN=""
|
||||
+ OPTION_NAME=""
|
||||
+ OPTION_VALUE=""
|
||||
+ RECHECK_WWID=""
|
||||
+ fi
|
||||
+ if [ -n "$FRIENDLY" ] && [ "$FRIENDLY" != "y" -a "$FRIENDLY" != "n" ]; then
|
||||
+ echo "--user_friendly_names must be either 'y' or 'n'"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [ -n "$RECHECK_WWID" ] && [ "$RECHECK_WWID" != "y" -a "$RECHECK_WWID" != "n" ]; then
|
||||
+ echo "--recheck_wwid must be either 'y' or 'n'"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [ "$FIND" = "y" ]; then
|
||||
+ FIND="yes"
|
||||
+ FIND="on"
|
||||
+ elif [ "$FIND" = "n" ]; then
|
||||
+ FIND="no"
|
||||
+ elif [ -n "$FIND" ] && [ "$FIND" != "yes" -a "$FIND" != "no" -a "$FIND" != "strict" -a "$FIND" != "greedy" -a "$FIND" != "smart" ]; then
|
||||
+ echo "--find_multipaths must be one of 'yes' 'no' 'strict' 'greedy' or 'smart'"
|
||||
+ FIND="off"
|
||||
+ elif [ -n "$FIND" ] && [ "$FIND" != "on" -a "$FIND" != "yes" -a "$FIND" != "off" -a "$FIND" != "no" -a "$FIND" != "strict" -a "$FIND" != "greedy" -a "$FIND" != "smart" ]; then
|
||||
+ echo "--find_multipaths must be one of 'on' 'yes' 'y' 'off' 'no' 'n' 'strict' 'greedy' or 'smart'"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [ -n "$PROPERTY" ] && [ "$PROPERTY" != "y" -a "$PROPERTY" != "n" ]; then
|
||||
|
|
@ -315,7 +370,19 @@ index 00000000..039b3e47
|
|||
+ echo "--enable_foreign must be either 'y' or 'n'"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" ]; then
|
||||
+ if [ -n "$OPTION_NAME" ]; then
|
||||
+ if [[ $OPTION_NAME =~ [[:space:]]|#|\"|!|\{|\} ]]; then
|
||||
+ echo "--option name \"$OPTION_NAME\" is invalid"
|
||||
+ exit 1
|
||||
+ elif [[ $OPTION_VALUE =~ \"|#|!|\{|\} ]]; then
|
||||
+ echo "--option value \"$OPTION_VALUE\" is invalid"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [[ $OPTION_VALUE =~ [[:space:]] ]]; then
|
||||
+ OPTION_VALUE=\"$OPTION_VALUE\"
|
||||
+ fi
|
||||
+ fi
|
||||
+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" -a -z "$OPTION_NAME" -a -z "$RECHECK_WWID" ]; then
|
||||
+ SHOW_STATUS=1
|
||||
+ fi
|
||||
+ if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then
|
||||
|
|
@ -417,6 +484,11 @@ index 00000000..039b3e47
|
|||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(no\|0\)" ; then
|
||||
+ HAVE_FRIENDLY=0
|
||||
+ fi
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)" ; then
|
||||
+ HAVE_RECHECK_WWID=1
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)" ; then
|
||||
+ HAVE_RECHECK_WWID=0
|
||||
+ fi
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*enable_foreign" ; then
|
||||
+ HAVE_FOREIGN=0
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"\.\*\"" ; then
|
||||
|
|
@ -428,6 +500,13 @@ index 00000000..039b3e47
|
|||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign" ; then
|
||||
+ HAVE_FOREIGN=3
|
||||
+ fi
|
||||
+ if [ -n "$OPTION_NAME" ]; then
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'[[:space:]][[:space:]]*'"$OPTION_VALUE" ; then
|
||||
+ HAVE_OPTION=1
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q '^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$' ; then
|
||||
+ HAVE_OPTION=0
|
||||
+ fi
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$HAVE_EXCEPTIONS" = "1" ]; then
|
||||
|
|
@ -445,7 +524,7 @@ index 00000000..039b3e47
|
|||
+ echo "multipath is disabled"
|
||||
+ fi
|
||||
+ if [ -z "$HAVE_FIND" ]; then
|
||||
+ echo "find_multipaths is no"
|
||||
+ echo "find_multipaths is off"
|
||||
+ else
|
||||
+ echo "find_multipaths is $HAVE_FIND"
|
||||
+ fi
|
||||
|
|
@ -454,6 +533,11 @@ index 00000000..039b3e47
|
|||
+ else
|
||||
+ echo "user_friendly_names is enabled"
|
||||
+ fi
|
||||
+ if [ -z "$HAVE_RECHECK_WWID" -o "$HAVE_RECHECK_WWID" = 0 ]; then
|
||||
+ echo "recheck_wwid is disabled"
|
||||
+ else
|
||||
+ echo "recheck_wwid is enabled"
|
||||
+ fi
|
||||
+ if [ -z "$HAVE_PROPERTY" -o "$HAVE_PROPERTY" = 0 ]; then
|
||||
+ echo "default property blacklist is disabled"
|
||||
+ else
|
||||
|
|
@ -570,13 +654,38 @@ index 00000000..039b3e47
|
|||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$RECHECK_WWID" = "n" ]; then
|
||||
+ if [ "$HAVE_RECHECK_WWID" = 1 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(yes\|1\)/ recheck_wwid no/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ "$RECHECK_WWID" = "y" ]; then
|
||||
+ if [ -z "$HAVE_RECHECK_WWID" ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/ a\
|
||||
+ recheck_wwid yes
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$HAVE_RECHECK_WWID" = 0 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*recheck_wwid[[:space:]][[:space:]]*\(no\|0\)/ recheck_wwid yes/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$PROPERTY" = "n" ]; then
|
||||
+ if [ "$HAVE_PROPERTY" = 1 ]; then
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/# property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ "$PROPERTY" = "y" ]; then
|
||||
+ if [ -z "$HAVE_PROPERTY" ]; then
|
||||
+ if [ -z "$HAVE_PROPERTY" -a -z "$HAVE_EXCEPTIONS" ]; then
|
||||
+ cat >> $TMPFILE << _EOF_
|
||||
+
|
||||
+blacklist_exceptions {
|
||||
+ property "(SCSI_IDENT_|ID_WWN)"
|
||||
+}
|
||||
+_EOF_
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ -z "$HAVE_PROPERTY" ]; then
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/ a\
|
||||
+ property "(SCSI_IDENT_|ID_WWN)"
|
||||
+' $TMPFILE
|
||||
|
|
@ -604,6 +713,21 @@ index 00000000..039b3e47
|
|||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ -n "$OPTION_NAME" -a -n "$OPTION_VALUE" ]; then
|
||||
+ if [ -z "$HAVE_OPTION" ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/ a\
|
||||
+ '"$OPTION_NAME"' '"$OPTION_VALUE"'
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$HAVE_OPTION" = 0 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/ '"$OPTION_NAME"' '"$OPTION_VALUE"'/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ -n "$OPTION_NAME" -a -n "$HAVE_OPTION" ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/{/^[[:space:]]*'"$OPTION_NAME"'\([[:space:]].*\)\?$/d}' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+fi
|
||||
+
|
||||
+if [ -f "$OUTPUTFILE" ]; then
|
||||
+ cp $OUTPUTFILE $OUTPUTFILE.old
|
||||
+ if [ $? != 0 ]; then
|
||||
|
|
@ -636,10 +760,10 @@ index 00000000..039b3e47
|
|||
+fi
|
||||
diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8
|
||||
new file mode 100644
|
||||
index 00000000..a14d831e
|
||||
index 00000000..ec4e5c56
|
||||
--- /dev/null
|
||||
+++ b/multipath/mpathconf.8
|
||||
@@ -0,0 +1,135 @@
|
||||
@@ -0,0 +1,151 @@
|
||||
+.TH MPATHCONF 8 "June 2010" "" "Linux Administrator's Manual"
|
||||
+.SH NAME
|
||||
+mpathconf - A tool for configuring device-mapper-multipath
|
||||
|
|
@ -682,10 +806,10 @@ index 00000000..a14d831e
|
|||
+.B user_friendly_names
|
||||
+set and
|
||||
+.B find_multipaths
|
||||
+set to \fByes\fP. To disable these, use the
|
||||
+set to \fBon\fP. To disable these, use the
|
||||
+.B --user_friendly_names n
|
||||
+and
|
||||
+.B --find_multipaths n
|
||||
+.B --find_multipaths off
|
||||
+options
|
||||
+.SH COMMANDS
|
||||
+.TP
|
||||
|
|
@ -719,7 +843,16 @@ index 00000000..a14d831e
|
|||
+defaults section. If set to \fBn\fP, this removes the line, if present. This
|
||||
+command can be used along with any other command.
|
||||
+.TP
|
||||
+.B --find_multipaths\fP { \fByes\fP | \fBno\fP | \fBstrict\fP | \fBgreedy\fP | \fBsmart\fP }
|
||||
+.B --recheck_wwid \fP { \fBy\fP | \fBn\fP }
|
||||
+If set to \fBy\fP, this adds the line
|
||||
+.B recheck_wwid yes
|
||||
+to the
|
||||
+.B /etc/multipath.conf
|
||||
+defaults section, or sets an existing line to \fByes\fP. If set to \fBn\fP, this
|
||||
+sets an existing \fBrecheck_wwid\fP line to \fBno\fP. This command can be used
|
||||
+along with any other command.
|
||||
+.TP
|
||||
+.B --find_multipaths\fP { \fBon\fP | \fByes\fP | \fBy\fP | \fBoff\fP | \fBno\fP | \fBn\fP | \fBstrict\fP | \fBgreedy\fP | \fBsmart\fP }
|
||||
+If set to \fB<value>\fP, this adds the line
|
||||
+.B find_multipaths <value>
|
||||
+to the
|
||||
|
|
@ -743,6 +876,13 @@ index 00000000..a14d831e
|
|||
+defaults section. if set to \fBn\fP, this removes the line, if present. This
|
||||
+command can be used along with any other command.
|
||||
+.TP
|
||||
+.B --option \fB<option_name>:[<value>]\fP
|
||||
+Sets the defaults section option \fB<option_name>\fP to \fB<value>\fP. If the
|
||||
+option was not previously set in the defaults section, it is added. If it was
|
||||
+set, its value is changed to \fB<value>\fP. If \fB<value>\fP is left blank,
|
||||
+then the option is removed from the defaults section, if was set there. This
|
||||
+command can be used along with any other command.
|
||||
+.TP
|
||||
+.B --outfile \fB<filename>\fP
|
||||
+Write the resulting multipath configuration to \fB<filename>\fP instead of
|
||||
+\fB/etc/multipath.conf\fP.
|
||||
|
|
@ -762,7 +902,7 @@ index 00000000..a14d831e
|
|||
+.B service multipathd stop
|
||||
+to stop the multipathd daemon on \fB--disable\fP, and
|
||||
+.B service multipathd reload
|
||||
+to reconfigure multipathd on \fB--user_frindly_names\fP and
|
||||
+to reconfigure multipathd on \fB--user_friendly_names\fP and
|
||||
+\fB--find_multipaths\fP.
|
||||
+This option is set to \fBn\fP by default.
|
||||
+.SH FILES
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:57 -0500
|
||||
Subject: [PATCH] multipath: free vectors in configure
|
||||
|
||||
configure() can retry multiple times, each time reallocing a maps and
|
||||
paths vector, and leaking the previous ones. Fix this by always freeing
|
||||
the vectors before configure() exits. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipath/main.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index ef89c7cf..8fc0e15f 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -466,7 +466,6 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
||||
*/
|
||||
curmp = vector_alloc();
|
||||
pathvec = vector_alloc();
|
||||
- atexit(cleanup_vecs);
|
||||
|
||||
if (!curmp || !pathvec) {
|
||||
condlog(0, "can not allocate memory");
|
||||
@@ -578,6 +577,11 @@ out:
|
||||
if (refwwid)
|
||||
FREE(refwwid);
|
||||
|
||||
+ free_multipathvec(curmp, KEEP_PATHS);
|
||||
+ vecs.mpvec = NULL;
|
||||
+ free_pathvec(pathvec, FREE_PATHS);
|
||||
+ vecs.pathvec = NULL;
|
||||
+
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -823,6 +827,7 @@ main (int argc, char *argv[])
|
||||
conf = get_multipath_config();
|
||||
conf->retrigger_tries = 0;
|
||||
conf->force_sync = 1;
|
||||
+ atexit(cleanup_vecs);
|
||||
while ((arg = getopt(argc, argv, ":adDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
switch(arg) {
|
||||
case 1: printf("optarg : %s\n",optarg);
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From d6ad888bad3850bb0a342ebcdc9fd78773eb3b2a Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 17 Oct 2014 11:20:34 -0500
|
||||
Subject: [PATCH] RH: add wwids from kernel cmdline mpath.wwids with -A
|
||||
|
|
@ -14,16 +14,16 @@ multipathd.service
|
|||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipath/main.c | 54 +++++++++++++++++++++++++++++++++--
|
||||
multipath/multipath.8 | 7 ++++-
|
||||
multipathd/multipathd.service | 1 +
|
||||
multipath/main.c | 54 ++++++++++++++++++++++++++++++--
|
||||
multipath/multipath.8.in | 7 ++++-
|
||||
multipathd/multipathd.service.in | 1 +
|
||||
3 files changed, 59 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 33377147..85e4481d 100644
|
||||
index 31012874..a667c2ee 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -122,7 +122,7 @@ usage (char * progname)
|
||||
@@ -111,7 +111,7 @@ usage (char * progname)
|
||||
fprintf (stderr, " %s [-v level] [-R retries] -F\n", progname);
|
||||
fprintf (stderr, " %s [-v level] [-l|-ll] [device]\n", progname);
|
||||
fprintf (stderr, " %s [-v level] [-a|-w] device\n", progname);
|
||||
|
|
@ -32,7 +32,7 @@ index 33377147..85e4481d 100644
|
|||
fprintf (stderr, " %s [-v level] [-i] [-c|-C] device\n", progname);
|
||||
fprintf (stderr, " %s [-v level] [-i] [-u|-U]\n", progname);
|
||||
fprintf (stderr, " %s [-h|-t|-T]\n", progname);
|
||||
@@ -136,6 +136,8 @@ usage (char * progname)
|
||||
@@ -125,6 +125,8 @@ usage (char * progname)
|
||||
" -f flush a multipath device map\n"
|
||||
" -F flush all multipath device maps\n"
|
||||
" -a add a device wwid to the wwids file\n"
|
||||
|
|
@ -41,7 +41,7 @@ index 33377147..85e4481d 100644
|
|||
" -c check if a device should be a path in a multipath device\n"
|
||||
" -C check if a multipath device has usable paths\n"
|
||||
" -q allow queue_if_no_path when multipathd is not running\n"
|
||||
@@ -455,6 +457,50 @@ static void cleanup_vecs(void)
|
||||
@@ -440,6 +442,50 @@ static void cleanup_vecs(void)
|
||||
free_pathvec(vecs.pathvec, FREE_PATHS);
|
||||
}
|
||||
|
||||
|
|
@ -92,16 +92,16 @@ index 33377147..85e4481d 100644
|
|||
static int
|
||||
configure (struct config *conf, enum mpath_cmds cmd,
|
||||
enum devtypes dev_type, char *devpath)
|
||||
@@ -833,7 +879,7 @@ main (int argc, char *argv[])
|
||||
conf->retrigger_tries = 0;
|
||||
conf->force_sync = 1;
|
||||
atexit(cleanup_vecs);
|
||||
@@ -851,7 +897,7 @@ main (int argc, char *argv[])
|
||||
condlog(1, "failed to register cleanup handler for vecs: %m");
|
||||
if (atexit(cleanup_bindings))
|
||||
condlog(1, "failed to register cleanup handler for bindings: %m");
|
||||
- while ((arg = getopt(argc, argv, ":adDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
+ while ((arg = getopt(argc, argv, ":aAdDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
switch(arg) {
|
||||
case 1: printf("optarg : %s\n",optarg);
|
||||
break;
|
||||
@@ -910,6 +956,10 @@ main (int argc, char *argv[])
|
||||
case 'v':
|
||||
if (!isdigit(optarg[0])) {
|
||||
@@ -922,6 +968,10 @@ main (int argc, char *argv[])
|
||||
case 'T':
|
||||
cmd = CMD_DUMP_CONFIG;
|
||||
break;
|
||||
|
|
@ -112,11 +112,11 @@ index 33377147..85e4481d 100644
|
|||
case 'h':
|
||||
usage(argv[0]);
|
||||
exit(RTVL_OK);
|
||||
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
||||
index 17df59f5..5ca75359 100644
|
||||
--- a/multipath/multipath.8
|
||||
+++ b/multipath/multipath.8
|
||||
@@ -63,7 +63,7 @@ multipath \- Device mapper target autoconfig.
|
||||
diff --git a/multipath/multipath.8.in b/multipath/multipath.8.in
|
||||
index b88e9a4c..edd742aa 100644
|
||||
--- a/multipath/multipath.8.in
|
||||
+++ b/multipath/multipath.8.in
|
||||
@@ -64,7 +64,7 @@ multipath \- Device mapper target autoconfig.
|
||||
.B multipath
|
||||
.RB [\| \-v\ \c
|
||||
.IR level \|]
|
||||
|
|
@ -125,7 +125,7 @@ index 17df59f5..5ca75359 100644
|
|||
.
|
||||
.LP
|
||||
.B multipath
|
||||
@@ -145,6 +145,11 @@ device mapper, path checkers ...).
|
||||
@@ -146,6 +146,11 @@ device mapper, path checkers ...).
|
||||
Add the WWID for the specified device to the WWIDs file.
|
||||
.
|
||||
.TP
|
||||
|
|
@ -137,15 +137,15 @@ index 17df59f5..5ca75359 100644
|
|||
.B \-w
|
||||
Remove the WWID for the specified device from the WWIDs file.
|
||||
.
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index 6d57c7e8..dfc1e962 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -16,6 +16,7 @@ Type=notify
|
||||
diff --git a/multipathd/multipathd.service.in b/multipathd/multipathd.service.in
|
||||
index ab166435..1ec08c6e 100644
|
||||
--- a/multipathd/multipathd.service.in
|
||||
+++ b/multipathd/multipathd.service.in
|
||||
@@ -19,6 +19,7 @@ StartLimitBurst=3
|
||||
[Service]
|
||||
Type=notify
|
||||
NotifyAccess=main
|
||||
LimitCORE=infinity
|
||||
ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath
|
||||
+ExecStartPre=-/sbin/multipath -A
|
||||
ExecStart=/sbin/multipathd -d -s
|
||||
ExecReload=/sbin/multipathd reconfigure
|
||||
TasksMax=infinity
|
||||
+ExecStartPre=-@BINDIR@/multipath -A
|
||||
ExecStart=@BINDIR@/multipathd -d -s
|
||||
ExecReload=@BINDIR@/multipathd reconfigure
|
||||
Restart=on-failure
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:58 -0500
|
||||
Subject: [PATCH] kpartx: Don't leak memory when getblock returns NULL
|
||||
|
||||
If a new block was allocated, but couldn't be filled, getblock will
|
||||
discard it. When it does so, it needs to free the block to avoid leaking
|
||||
memory. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
kpartx/kpartx.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
|
||||
index 8ff116b8..7bc64543 100644
|
||||
--- a/kpartx/kpartx.c
|
||||
+++ b/kpartx/kpartx.c
|
||||
@@ -766,6 +766,8 @@ getblock (int fd, unsigned int blknr) {
|
||||
if (read(fd, bp->block, secsz) != secsz) {
|
||||
fprintf(stderr, "read error, sector %d\n", secnr);
|
||||
blockhead = bp->next;
|
||||
+ free(bp->block);
|
||||
+ free(bp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From 064d761121e7e2c7b63ab280e341d8010a413119 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 7 Jun 2018 17:43:52 -0500
|
||||
Subject: [PATCH] RH: reset default find_mutipaths value to off
|
||||
|
|
@ -6,16 +6,18 @@ Subject: [PATCH] RH: reset default find_mutipaths value to off
|
|||
Upstream has changed to default find_multipaths to "strict". For now
|
||||
Redhat will retain the previous default of "off".
|
||||
|
||||
Co-authored-by: Paul Donohue <git@PaulSD.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/defaults.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
libmultipath/defaults.h | 2 +-
|
||||
multipath/multipath.conf.5.in | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
|
||||
index c27946c7..e0dd32ad 100644
|
||||
index 134b690a..e2fe7ac4 100644
|
||||
--- a/libmultipath/defaults.h
|
||||
+++ b/libmultipath/defaults.h
|
||||
@@ -23,7 +23,7 @@
|
||||
@@ -24,7 +24,7 @@
|
||||
#define DEFAULT_NO_PATH_RETRY NO_PATH_RETRY_UNDEF
|
||||
#define DEFAULT_VERBOSITY 2
|
||||
#define DEFAULT_REASSIGN_MAPS 0
|
||||
|
|
@ -24,3 +26,16 @@ index c27946c7..e0dd32ad 100644
|
|||
#define DEFAULT_FAST_IO_FAIL 5
|
||||
#define DEFAULT_DEV_LOSS_TMO 600
|
||||
#define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_ON
|
||||
diff --git a/multipath/multipath.conf.5.in b/multipath/multipath.conf.5.in
|
||||
index ba291e11..b8389db3 100644
|
||||
--- a/multipath/multipath.conf.5.in
|
||||
+++ b/multipath/multipath.conf.5.in
|
||||
@@ -1227,7 +1227,7 @@ as non-multipath and passed on to upper layers.
|
||||
\fBNote:\fR this may cause delays during device detection if
|
||||
there are single-path devices which aren\'t blacklisted.
|
||||
.TP
|
||||
-The default is: \fBstrict\fR
|
||||
+The default is: \fBoff\fR
|
||||
.RE
|
||||
.
|
||||
.
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:59 -0500
|
||||
Subject: [PATCH] multipathd: don't rescan_path on wwid change in
|
||||
uev_update_path
|
||||
|
||||
If get_uid() is returning a different wwid in uev_update_path(), then
|
||||
the uid_attribute must have already gotten updated, which was the
|
||||
purpose behind calling rescan_path() in the first place.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/main.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 26a4e44e..2251e02c 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1359,7 +1359,6 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
condlog(0, "%s: path wwid changed from '%s' to '%s'",
|
||||
uev->kernel, wwid, pp->wwid);
|
||||
ev_remove_path(pp, vecs, 1);
|
||||
- rescan_path(uev->udev);
|
||||
needs_reinit = 1;
|
||||
goto out;
|
||||
} else {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From 335b8eb2773b07a602e84e14c1f3e289a9b25b5a Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 11 Apr 2019 13:25:42 -0500
|
||||
Subject: [PATCH] RH: attempt to get ANA info via sysfs first
|
||||
|
|
@ -13,10 +13,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||
1 file changed, 29 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/prioritizers/ana.c b/libmultipath/prioritizers/ana.c
|
||||
index b5c7873d..e139360c 100644
|
||||
index 34527b22..4eaa3cc3 100644
|
||||
--- a/libmultipath/prioritizers/ana.c
|
||||
+++ b/libmultipath/prioritizers/ana.c
|
||||
@@ -24,6 +24,7 @@
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "prio.h"
|
||||
#include "util.h"
|
||||
#include "structs.h"
|
||||
|
|
@ -24,7 +24,7 @@ index b5c7873d..e139360c 100644
|
|||
|
||||
enum {
|
||||
ANA_ERR_GETCTRL_FAILED = 1,
|
||||
@@ -36,6 +37,7 @@ enum {
|
||||
@@ -35,6 +36,7 @@ enum {
|
||||
ANA_ERR_GETNS_FAILED,
|
||||
ANA_ERR_NO_MEMORY,
|
||||
ANA_ERR_NO_INFORMATION,
|
||||
|
|
@ -32,7 +32,7 @@ index b5c7873d..e139360c 100644
|
|||
};
|
||||
|
||||
static const char *ana_errmsg[] = {
|
||||
@@ -49,6 +51,7 @@ static const char *ana_errmsg[] = {
|
||||
@@ -48,6 +50,7 @@ static const char *ana_errmsg[] = {
|
||||
[ANA_ERR_GETNS_FAILED] = "couldn't get namespace info",
|
||||
[ANA_ERR_NO_MEMORY] = "out of memory",
|
||||
[ANA_ERR_NO_INFORMATION] = "invalid fd",
|
||||
|
|
@ -40,7 +40,7 @@ index b5c7873d..e139360c 100644
|
|||
};
|
||||
|
||||
static const char *anas_string[] = {
|
||||
@@ -107,6 +110,27 @@ static int get_ana_state(__u32 nsid, __u32 anagrpid, void *ana_log,
|
||||
@@ -106,6 +109,27 @@ static int get_ana_state(__u32 nsid, __u32 anagrpid, void *ana_log,
|
||||
return -ANA_ERR_GETANAS_NOTFOUND;
|
||||
}
|
||||
|
||||
|
|
@ -68,7 +68,7 @@ index b5c7873d..e139360c 100644
|
|||
static int get_ana_info(struct path * pp)
|
||||
{
|
||||
int rc;
|
||||
@@ -210,8 +234,11 @@ int getprio(struct path *pp, __attribute__((unused)) char *args,
|
||||
@@ -208,8 +232,11 @@ int getprio(struct path *pp, __attribute__((unused)) char *args)
|
||||
|
||||
if (pp->fd < 0)
|
||||
rc = -ANA_ERR_NO_INFORMATION;
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:37:34 +0200
|
||||
Subject: [PATCH] multipathd: cli_handlers: cleanup setting reply length
|
||||
|
||||
Create a macro for setting the reply length for string literals
|
||||
correctly, and use it where necessary.
|
||||
|
||||
In cli_del_path(), don't change the function's return code
|
||||
if just the buffer allocation for the reply failed.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 33 ++++++++++++---------------------
|
||||
1 file changed, 12 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 6765fcf0..96064944 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -32,6 +32,12 @@
|
||||
#include "foreign.h"
|
||||
#include "cli_handlers.h"
|
||||
|
||||
+#define SET_REPLY_AND_LEN(__rep, __len, string_literal) \
|
||||
+ do { \
|
||||
+ *(__rep) = strdup(string_literal); \
|
||||
+ *(__len) = *(__rep) ? sizeof(string_literal) : 0; \
|
||||
+ } while (0)
|
||||
+
|
||||
int
|
||||
show_paths (char ** r, int * len, struct vectors * vecs, char * style,
|
||||
int pretty)
|
||||
@@ -802,8 +808,7 @@ cli_add_path (void * v, char ** reply, int * len, void * data)
|
||||
}
|
||||
return ev_add_path(pp, vecs, 1);
|
||||
blacklisted:
|
||||
- *reply = strdup("blacklisted\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ SET_REPLY_AND_LEN(reply, len, "blacklisted\n");
|
||||
condlog(2, "%s: path blacklisted", param);
|
||||
return 0;
|
||||
}
|
||||
@@ -824,23 +829,10 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
return 1;
|
||||
}
|
||||
ret = ev_remove_path(pp, vecs, 1);
|
||||
- if (ret == REMOVE_PATH_DELAY) {
|
||||
- *reply = strdup("delayed\n");
|
||||
- if (*reply)
|
||||
- *len = strlen(*reply) + 1;
|
||||
- else {
|
||||
- *len = 0;
|
||||
- ret = REMOVE_PATH_FAILURE;
|
||||
- }
|
||||
- } else if (ret == REMOVE_PATH_MAP_ERROR) {
|
||||
- *reply = strdup("map reload error. removed\n");
|
||||
- if (*reply)
|
||||
- *len = strlen(*reply) + 1;
|
||||
- else {
|
||||
- *len = 0;
|
||||
- ret = REMOVE_PATH_FAILURE;
|
||||
- }
|
||||
- }
|
||||
+ if (ret == REMOVE_PATH_DELAY)
|
||||
+ SET_REPLY_AND_LEN(reply, len, "delayed\n");
|
||||
+ else if (ret == REMOVE_PATH_MAP_ERROR)
|
||||
+ SET_REPLY_AND_LEN(reply, len, "map reload error. removed\n");
|
||||
return (ret == REMOVE_PATH_FAILURE);
|
||||
}
|
||||
|
||||
@@ -865,8 +857,7 @@ cli_add_map (void * v, char ** reply, int * len, void * data)
|
||||
invalid = 1;
|
||||
pthread_cleanup_pop(1);
|
||||
if (invalid) {
|
||||
- *reply = strdup("blacklisted\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ SET_REPLY_AND_LEN(reply, len, "blacklisted\n");
|
||||
condlog(2, "%s: map blacklisted", param);
|
||||
return 1;
|
||||
}
|
||||
96
0010-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
Normal file
96
0010-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
From 137c96d16b6bb03d8a52854e152db4ee36b7d9e4 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 25 Mar 2021 13:05:10 -0500
|
||||
Subject: [PATCH] RH: make parse_vpd_pg83 match scsi_id output
|
||||
|
||||
Red Hat sets ID_SERIAL based on the result of scsi_id, instead of using
|
||||
the result of sg_inq and 55-scsi-sg3_id.rules. Make parse_vpd_pg83 match
|
||||
that.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 12 ++----------
|
||||
tests/vpd.c | 6 ++++++
|
||||
2 files changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index 31db8758..21cfcc73 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1225,13 +1225,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
||||
good_len = 8;
|
||||
break;
|
||||
case 2:
|
||||
- /* IEEE Extended: Prio 6 */
|
||||
- new_prio = 6;
|
||||
- good_len = 8;
|
||||
- break;
|
||||
case 3:
|
||||
- /* IEEE Locally assigned: Prio 1 */
|
||||
- new_prio = 1;
|
||||
+ /* IEEE Extended or Locally assigned: Prio 6 */
|
||||
+ new_prio = 6;
|
||||
good_len = 8;
|
||||
break;
|
||||
default:
|
||||
@@ -1249,10 +1245,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
||||
break;
|
||||
case 0x8:
|
||||
/* SCSI Name: Prio 3 */
|
||||
- invalid = (d[3] < 4 || (memcmp(d + 4, "eui.", 4) &&
|
||||
- memcmp(d + 4, "naa.", 4) &&
|
||||
- memcmp(d + 4, "iqn.", 4)));
|
||||
- new_prio = 3;
|
||||
break;
|
||||
case 0x1:
|
||||
/* T-10 Vendor ID: Prio 2 */
|
||||
diff --git a/tests/vpd.c b/tests/vpd.c
|
||||
index e3212e61..cdb111bb 100644
|
||||
--- a/tests/vpd.c
|
||||
+++ b/tests/vpd.c
|
||||
@@ -232,11 +232,13 @@ static const char * const str_prefix[] = {
|
||||
[STR_IQN] = "iqn.",
|
||||
};
|
||||
|
||||
+#if 0
|
||||
static const char byte0[] = {
|
||||
[STR_EUI] = '2',
|
||||
[STR_NAA] = '3',
|
||||
[STR_IQN] = '8',
|
||||
};
|
||||
+#endif
|
||||
|
||||
/**
|
||||
* create_scsi_string_desc() - create a SCSI name string descriptor.
|
||||
@@ -767,6 +769,7 @@ make_test_vpd_naa(2, 18);
|
||||
make_test_vpd_naa(2, 17);
|
||||
make_test_vpd_naa(2, 16);
|
||||
|
||||
+#if 0
|
||||
/* SCSI Name string: EUI64, WWID size: 17 */
|
||||
make_test_vpd_str(0, 20, 18)
|
||||
make_test_vpd_str(0, 20, 17)
|
||||
@@ -802,6 +805,7 @@ make_test_vpd_str(18, 20, 18)
|
||||
make_test_vpd_str(18, 20, 17)
|
||||
make_test_vpd_str(18, 20, 16)
|
||||
make_test_vpd_str(18, 20, 15)
|
||||
+#endif
|
||||
|
||||
static int test_vpd(void)
|
||||
{
|
||||
@@ -910,6 +914,7 @@ static int test_vpd(void)
|
||||
cmocka_unit_test(test_vpd_naa_2_18),
|
||||
cmocka_unit_test(test_vpd_naa_2_17),
|
||||
cmocka_unit_test(test_vpd_naa_2_16),
|
||||
+/*
|
||||
cmocka_unit_test(test_vpd_str_0_20_18),
|
||||
cmocka_unit_test(test_vpd_str_0_20_17),
|
||||
cmocka_unit_test(test_vpd_str_0_20_16),
|
||||
@@ -934,6 +939,7 @@ static int test_vpd(void)
|
||||
cmocka_unit_test(test_vpd_str_18_20_17),
|
||||
cmocka_unit_test(test_vpd_str_18_20_16),
|
||||
cmocka_unit_test(test_vpd_str_18_20_15),
|
||||
+*/
|
||||
};
|
||||
return cmocka_run_group_tests(tests, setup, teardown);
|
||||
}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:45:05 +0200
|
||||
Subject: [PATCH] multipathd: cli_getprkey(): fix return value
|
||||
|
||||
By setting (*reply)[19] = '\0', we always truncated a possible
|
||||
":aptpl" suffix. Fix it, and use the return value of snprintf()
|
||||
as length.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 17 ++++++++---------
|
||||
1 file changed, 8 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 96064944..59d44b45 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -1540,7 +1540,7 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
|
||||
struct multipath * mpp;
|
||||
struct vectors * vecs = (struct vectors *)data;
|
||||
char *mapname = get_keyparam(v, MAP);
|
||||
- char *flagstr = "";
|
||||
+ uint64_t key;
|
||||
|
||||
mapname = convert_dev(mapname, 0);
|
||||
condlog(3, "%s: get persistent reservation key (operator)", mapname);
|
||||
@@ -1553,17 +1553,16 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
|
||||
if (!*reply)
|
||||
return 1;
|
||||
|
||||
- if (!get_be64(mpp->reservation_key)) {
|
||||
+ key = get_be64(mpp->reservation_key);
|
||||
+ if (!key) {
|
||||
sprintf(*reply, "none\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ *len = sizeof("none\n");
|
||||
return 0;
|
||||
}
|
||||
- if (mpp->sa_flags & MPATH_F_APTPL_MASK)
|
||||
- flagstr = ":aptpl";
|
||||
- snprintf(*reply, 26, "0x%" PRIx64 "%s\n",
|
||||
- get_be64(mpp->reservation_key), flagstr);
|
||||
- (*reply)[19] = '\0';
|
||||
- *len = strlen(*reply) + 1;
|
||||
+
|
||||
+ /* This snprintf() can't overflow - PRIx64 needs max 16 chars */
|
||||
+ *len = snprintf(*reply, 26, "0x%" PRIx64 "%s\n", key,
|
||||
+ mpp->sa_flags & MPATH_F_APTPL_MASK ? ":aptpl" : "") + 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
25
0011-RH-add-scsi-device-handlers-to-modules-load.d.patch
Normal file
25
0011-RH-add-scsi-device-handlers-to-modules-load.d.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
From 374755791536be4870ab2e93ae36549cbaaeb800 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 25 Mar 2022 18:12:06 -0500
|
||||
Subject: [PATCH] RH: add scsi device handlers to modules-load.d
|
||||
|
||||
Make scsi_dh_alua scsi_dh_emc and scsi_dh_rdac get loaded in early boot.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 03aee175..936a622f 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -16,7 +16,7 @@ READLINE :=
|
||||
|
||||
# List of scsi device handler modules to load on boot, e.g.
|
||||
# SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac
|
||||
-SCSI_DH_MODULES_PRELOAD :=
|
||||
+SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_emc scsi_dh_rdac
|
||||
|
||||
EXTRAVERSION := $(shell rev=$$(git rev-parse --short=7 HEAD 2>/dev/null); echo $${rev:+-g$$rev})
|
||||
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:43:02 +0200
|
||||
Subject: [PATCH] multipath-tools: enable -Wformat-overflow=2
|
||||
|
||||
Allow the compiler to catch possible format string overflows.
|
||||
Two were found by gcc 10.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 3 ++-
|
||||
libmultipath/discovery.c | 2 +-
|
||||
libmultipath/print.c | 4 ++--
|
||||
3 files changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index f1e23131..91100a20 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -95,9 +95,10 @@ TEST_CC_OPTION = $(shell \
|
||||
STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
|
||||
WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
|
||||
+WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
|
||||
|
||||
OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
-WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 -Werror=implicit-int \
|
||||
+WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
$(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index ec99a7aa..bfe2f56c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -635,7 +635,7 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp)
|
||||
{
|
||||
struct udev_device *rport_dev = NULL;
|
||||
char value[16], *eptr;
|
||||
- char rport_id[32];
|
||||
+ char rport_id[42];
|
||||
unsigned int tmo;
|
||||
int ret;
|
||||
|
||||
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||
index 8151e11e..3c69bf48 100644
|
||||
--- a/libmultipath/print.c
|
||||
+++ b/libmultipath/print.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/*
|
||||
+ /*
|
||||
* Copyright (c) 2005 Christophe Varoqui
|
||||
*/
|
||||
#include <stdio.h>
|
||||
@@ -594,7 +594,7 @@ int
|
||||
snprint_tgt_wwpn (char * buff, size_t len, const struct path * pp)
|
||||
{
|
||||
struct udev_device *rport_dev = NULL;
|
||||
- char rport_id[32];
|
||||
+ char rport_id[42];
|
||||
const char *value = NULL;
|
||||
int ret;
|
||||
|
||||
26
0012-RH-compile-with-libreadline-support.patch
Normal file
26
0012-RH-compile-with-libreadline-support.patch
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
From cc15379130e8aa068e97c64afd46be212b456d4f Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Tue, 15 Nov 2022 18:03:33 -0600
|
||||
Subject: [PATCH] RH: compile with libreadline support
|
||||
|
||||
Since the license issue has been resolved, and there are problems with
|
||||
the command completion with libedit, use libreadline.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 936a622f..f475f70f 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -12,7 +12,7 @@
|
||||
# Readline library to use, libedit, libreadline, or empty
|
||||
# Caution: Using libreadline may make the multipathd binary undistributable,
|
||||
# see https://github.com/opensvc/multipath-tools/issues/36
|
||||
-READLINE :=
|
||||
+READLINE := libreadline
|
||||
|
||||
# List of scsi device handler modules to load on boot, e.g.
|
||||
# SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac
|
||||
|
|
@ -1,347 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 23:12:10 +0200
|
||||
Subject: [PATCH] libdmmp: use KBUILD_BUILD_TIMESTAMP when building man pages
|
||||
|
||||
Use the latest commit timestamp of the "libdmmp.h" file as
|
||||
the timestamp for the man pages. This should avoid spurious rebuilds
|
||||
of the documentation.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libdmmp/Makefile | 2 ++
|
||||
libdmmp/docs/man/dmmp_context_free.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_func_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_priority_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_priority_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_new.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_timeout_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_timeout_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_userdata_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_userdata_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_flush_mpath.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_last_error_msg.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_log_priority_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_array_free.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_kdev_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_wwid_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_blk_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_id_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_priority_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_selector_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_status_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_status_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_status_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_status_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_reconfig.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_strerror.3 | 2 +-
|
||||
30 files changed, 31 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/libdmmp/Makefile b/libdmmp/Makefile
|
||||
index 764a0bc5..79b92fb2 100644
|
||||
--- a/libdmmp/Makefile
|
||||
+++ b/libdmmp/Makefile
|
||||
@@ -76,6 +76,8 @@ docs/man/%.3.gz: docs/man/%.3
|
||||
docs/man/dmmp_strerror.3: $(HEADERS)
|
||||
TEMPFILE=$(shell mktemp); \
|
||||
cat $^ | perl docs/doc-preclean.pl >$$TEMPFILE; \
|
||||
+ LC_ALL=C \
|
||||
+ KBUILD_BUILD_TIMESTAMP=`git log -n1 --pretty=%cd --date=iso -- $^` \
|
||||
perl docs/kernel-doc -man $$TEMPFILE | \
|
||||
perl docs/split-man.pl docs/man; \
|
||||
rm -f $$TEMPFILE
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_free.3 b/libdmmp/docs/man/dmmp_context_free.3
|
||||
index 0d26f42c..7c109e13 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_free.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_free.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_free" 3 "dmmp_context_free" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_free" 3 "dmmp_context_free" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_free \- Release the memory of struct dmmp_context.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_func_set.3 b/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
index 986793db..be311ecf 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_func_set" 3 "dmmp_context_log_func_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_func_set" 3 "dmmp_context_log_func_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_func_set \- Set log handler function.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_priority_get.3 b/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
index 9a273a28..be383013 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_priority_get" 3 "dmmp_context_log_priority_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_priority_get" 3 "dmmp_context_log_priority_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_priority_get \- Get log priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_priority_set.3 b/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
index 469c5a49..79e4d2e8 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_priority_set" 3 "dmmp_context_log_priority_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_priority_set" 3 "dmmp_context_log_priority_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_priority_set \- Set log priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_new.3 b/libdmmp/docs/man/dmmp_context_new.3
|
||||
index 0eaeb00d..12505f91 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_new.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_new.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_new" 3 "dmmp_context_new" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_new" 3 "dmmp_context_new" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_new \- Create struct dmmp_context.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_timeout_get.3 b/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
index 1df27936..2ed825d5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_timeout_get" 3 "dmmp_context_timeout_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_timeout_get" 3 "dmmp_context_timeout_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_timeout_get \- Get IPC timeout.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_timeout_set.3 b/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
index f3d77092..16bc9d99 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_timeout_set" 3 "dmmp_context_timeout_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_timeout_set" 3 "dmmp_context_timeout_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_timeout_set \- Set IPC timeout.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_userdata_get.3 b/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
index fb713d50..eff446c6 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_userdata_get" 3 "dmmp_context_userdata_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_userdata_get" 3 "dmmp_context_userdata_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_userdata_get \- Get user data pointer.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_userdata_set.3 b/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
index c5bf63f3..d7be869f 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_userdata_set" 3 "dmmp_context_userdata_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_userdata_set" 3 "dmmp_context_userdata_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_userdata_set \- Set user data pointer.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_flush_mpath.3 b/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
index cdfd5266..359607ed 100644
|
||||
--- a/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
+++ b/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_flush_mpath" 3 "dmmp_flush_mpath" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_flush_mpath" 3 "dmmp_flush_mpath" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_flush_mpath \- Flush specified multipath device map if unused.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_last_error_msg.3 b/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
index 20acbc6a..378c55a5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
+++ b/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_last_error_msg" 3 "dmmp_last_error_msg" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_last_error_msg" 3 "dmmp_last_error_msg" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_last_error_msg \- Retrieves the last error message.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_log_priority_str.3 b/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
index 3b5f8284..b2761602 100644
|
||||
--- a/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_log_priority_str" 3 "dmmp_log_priority_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_log_priority_str" 3 "dmmp_log_priority_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_log_priority_str \- Convert log priority to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_array_free.3 b/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
index 8c294e0d..0514a66f 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_array_free" 3 "dmmp_mpath_array_free" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_array_free" 3 "dmmp_mpath_array_free" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_array_free \- Free 'struct dmmp_mpath' pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_array_get.3 b/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
index e211db42..8b0e5b53 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_array_get" 3 "dmmp_mpath_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_array_get" 3 "dmmp_mpath_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_array_get \- Query all existing multipath devices.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3 b/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
index e802fe6d..ddead551 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_kdev_name_get" 3 "dmmp_mpath_kdev_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_kdev_name_get" 3 "dmmp_mpath_kdev_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_kdev_name_get \- Retrieve kernel DEVNAME of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_name_get.3 b/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
index d70579e5..2b0027e5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_name_get" 3 "dmmp_mpath_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_name_get" 3 "dmmp_mpath_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_name_get \- Retrieve name(alias) of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_wwid_get.3 b/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
index 3d060e92..b8e9e7d8 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_wwid_get" 3 "dmmp_mpath_wwid_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_wwid_get" 3 "dmmp_mpath_wwid_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_wwid_get \- Retrieve WWID of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_array_get.3 b/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
index 53340b3d..21f486be 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_array_get" 3 "dmmp_path_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_array_get" 3 "dmmp_path_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_array_get \- Retrieve path pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_blk_name_get.3 b/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
index da5f9f03..5938f0e7 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_blk_name_get" 3 "dmmp_path_blk_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_blk_name_get" 3 "dmmp_path_blk_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_blk_name_get \- Retrieve block name.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_array_get.3 b/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
index 6eee4a2b..ca3187cb 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_array_get" 3 "dmmp_path_group_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_array_get" 3 "dmmp_path_group_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_array_get \- Retrieve path groups pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_id_get.3 b/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
index 4f07b536..a84f31f0 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_id_get" 3 "dmmp_path_group_id_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_id_get" 3 "dmmp_path_group_id_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_id_get \- Retrieve path group ID.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_priority_get.3 b/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
index a48b2704..1cda8af3 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_priority_get" 3 "dmmp_path_group_priority_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_priority_get" 3 "dmmp_path_group_priority_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_priority_get \- Retrieve path group priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_selector_get.3 b/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
index 407b3f41..f55477bb 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_selector_get" 3 "dmmp_path_group_selector_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_selector_get" 3 "dmmp_path_group_selector_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_selector_get \- Retrieve path group selector.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_status_get.3 b/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
index a81aeb3a..53e68b8e 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_status_get" 3 "dmmp_path_group_status_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_status_get" 3 "dmmp_path_group_status_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_status_get \- Retrieve path group status.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_status_str.3 b/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
index e4a9f74b..98f877a4 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_status_str" 3 "dmmp_path_group_status_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_status_str" 3 "dmmp_path_group_status_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_status_str \- Convert path group status to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_status_get.3 b/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
index 025cfee5..baa4437d 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_status_get" 3 "dmmp_path_status_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_status_get" 3 "dmmp_path_status_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_status_get \- Retrieve the path status.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_status_str.3 b/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
index 3944d399..425e472a 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_status_str" 3 "dmmp_path_status_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_status_str" 3 "dmmp_path_status_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_status_str \- Convert path status to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_reconfig.3 b/libdmmp/docs/man/dmmp_reconfig.3
|
||||
index a743e308..36bd5041 100644
|
||||
--- a/libdmmp/docs/man/dmmp_reconfig.3
|
||||
+++ b/libdmmp/docs/man/dmmp_reconfig.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_reconfig" 3 "dmmp_reconfig" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_reconfig" 3 "dmmp_reconfig" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_reconfig \- Instruct multipathd daemon to do reconfiguration.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_strerror.3 b/libdmmp/docs/man/dmmp_strerror.3
|
||||
index 4d753d36..3acd9c9d 100644
|
||||
--- a/libdmmp/docs/man/dmmp_strerror.3
|
||||
+++ b/libdmmp/docs/man/dmmp_strerror.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_strerror" 3 "dmmp_strerror" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_strerror" 3 "dmmp_strerror" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_strerror \- Convert error code to string.
|
||||
.SH SYNOPSIS
|
||||
186
0013-RH-Add-mpathcleanup.patch
Normal file
186
0013-RH-Add-mpathcleanup.patch
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
From 2ef5bd86052ba0b22f4d3a16e69cdf268d90a53a Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 7 Jul 2023 15:25:59 -0500
|
||||
Subject: [PATCH] RH: Add mpathcleanup
|
||||
|
||||
mpathcleanup is a program that will remove a multipath device as well as
|
||||
all of the scsi path devices that make it up.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipath/Makefile | 2 +
|
||||
multipath/mpathcleanup | 145 +++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 147 insertions(+)
|
||||
create mode 100755 multipath/mpathcleanup
|
||||
|
||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
||||
index 3dc241cc..47e82234 100644
|
||||
--- a/multipath/Makefile
|
||||
+++ b/multipath/Makefile
|
||||
@@ -25,6 +25,7 @@ install:
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
|
||||
$(Q)$(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
|
||||
+ $(Q)$(INSTALL_PROGRAM) -m 755 mpathcleanup $(DESTDIR)$(bindir)/
|
||||
$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
|
||||
$(Q)$(INSTALL_PROGRAM) -m 644 99-z-dm-mpath-late.rules $(DESTDIR)$(udevrulesdir)
|
||||
@@ -49,6 +50,7 @@ endif
|
||||
uninstall:
|
||||
$(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC)
|
||||
$(Q)$(RM) $(DESTDIR)$(bindir)/mpathconf
|
||||
+ $(Q)$(RM) $(DESTDIR)$(bindir)/mpathcleanup
|
||||
$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/99-z-dm-mpath-late.rules
|
||||
$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
|
||||
diff --git a/multipath/mpathcleanup b/multipath/mpathcleanup
|
||||
new file mode 100755
|
||||
index 00000000..6fd921e4
|
||||
--- /dev/null
|
||||
+++ b/multipath/mpathcleanup
|
||||
@@ -0,0 +1,145 @@
|
||||
+#!/bin/bash
|
||||
+#
|
||||
+# Copyright (C) 2023 Red Hat, Inc. All rights reserved.
|
||||
+#
|
||||
+# This file is part of the device-mapper-multipath package.
|
||||
+#
|
||||
+# This copyrighted material is made available to anyone wishing to use,
|
||||
+# modify, copy, or redistribute it subject to the terms and conditions
|
||||
+# of the GNU General Public License v.2.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software Foundation,
|
||||
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
+
|
||||
+unset PROGRAM FLUSH DEVICE DEVNAME MAJOR MINOR PATHDEVS PATHDEV HAVE_MULTIPATHD QUEUEING
|
||||
+
|
||||
+function usage
|
||||
+{
|
||||
+ echo "usage: $PROGRAM [-h] [--flush] <device>"
|
||||
+ echo ""
|
||||
+ echo "remove a multipath device and its scsi path devices"
|
||||
+ echo ""
|
||||
+ echo "options:"
|
||||
+ echo " -h, --help show this help message and exit"
|
||||
+ echo " --flush disable queuing on the multipath device and"
|
||||
+ echo " flush the path devices before removing"
|
||||
+}
|
||||
+
|
||||
+function parse_args
|
||||
+{
|
||||
+ while [ -n "$1" ]; do
|
||||
+ case $1 in
|
||||
+ --flush)
|
||||
+ FLUSH=1
|
||||
+ shift
|
||||
+ ;;
|
||||
+ --help | -h)
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ ;;
|
||||
+ *)
|
||||
+ if [ -n "$DEVICE" ]; then
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ DEVICE=$1
|
||||
+ shift
|
||||
+ ;;
|
||||
+ esac
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+function validate_device
|
||||
+{
|
||||
+ if [ -z "$DEVICE" ]; then
|
||||
+ usage
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [[ "$DEVICE" =~ ^[[:digit:]]+:[[:digit:]]+$ ]]; then
|
||||
+ MAJOR=${DEVICE%%:*}
|
||||
+ MINOR=${DEVICE##*:}
|
||||
+ DEVNAME=`dmsetup ls --target multipath | grep "($MAJOR, $MINOR)$" | awk '{print $1}'`
|
||||
+ else
|
||||
+ DEVNAME=`dmsetup ls --target multipath | awk '{print $1}' | grep "^$DEVICE$"`
|
||||
+ fi
|
||||
+ if [ -z "$DEVNAME" ]; then
|
||||
+ DEVNAME=`multipath -v 1 -l $DEVICE 2>/dev/null`
|
||||
+ if [ -z "$DEVNAME" ]; then
|
||||
+ echo "$DEVICE is not a multipath device"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ # verify that this is not a native nvme multipath device
|
||||
+ dmsetup ls --target multipath | awk '{print $1}' | grep -q "^$DEVNAME$"
|
||||
+ if test $? -eq 1; then
|
||||
+ echo "$DEVICE is not a device-mapper multipath device"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ fi
|
||||
+ if [ -z "$MINOR" ]; then
|
||||
+ MINOR=`dmsetup info -c --noheadings -o minor $DEVNAME`
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function get_paths
|
||||
+{
|
||||
+ PATHDEVS=`ls /sys/block/dm-$MINOR/slaves`
|
||||
+ for PATHDEV in $PATHDEVS; do
|
||||
+ if [[ ! "$PATHDEV" =~ ^sd[a-z]+$ ]]; then
|
||||
+ echo "$PATHDEV is not a scsi device. $PROGRAM only works with scsi devices"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+function remove_devs
|
||||
+{
|
||||
+ pidof multipathd > /dev/null
|
||||
+ HAVE_MULTIPATHD=$?
|
||||
+ multipath -v2 -l "$DEVNAME" | grep features | grep -q queue_if_no_path
|
||||
+ QUEUEING=$?
|
||||
+ if [ -n "$FLUSH" ] && [ "$QUEUEING" -eq 0 ]; then
|
||||
+ if test $HAVE_MULTIPATHD -eq 0; then
|
||||
+ multipathd disablequeueing map "$DEVNAME" > /dev/null
|
||||
+ else
|
||||
+ dmsetup message "$DEVNAME" 0 fail_if_no_path
|
||||
+ fi
|
||||
+ sleep 1
|
||||
+ fi
|
||||
+ if test $HAVE_MULTIPATHD -eq 0; then
|
||||
+ multipath -f "$DEVNAME"
|
||||
+ else
|
||||
+ multipathd -Df "$DEVNAME"
|
||||
+ fi
|
||||
+ if test $? -eq 1; then
|
||||
+ echo "$DEVICE cannot be removed"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ for PATHDEV in $PATHDEVS; do
|
||||
+ if [ -n "$FLUSH" ]; then
|
||||
+ blockdev --flushbufs /dev/"$PATHDEV"
|
||||
+ fi
|
||||
+ echo 1 > /sys/block/"$PATHDEV"/device/delete
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+function verify_removal
|
||||
+{
|
||||
+ multipath -v 1 -d $DEVNAME | grep -q "^$DEVNAME$"
|
||||
+ if test $? -eq 0; then
|
||||
+ echo "$DEVICE removed but path devices still exist"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ multipath -v 1 -l $DEVNAME | grep -q "^$DEVNAME$"
|
||||
+ if test $? -eq 0; then
|
||||
+ echo "$DEVICE removal succeeded, but device still exists"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+PROGRAM="$0"
|
||||
+parse_args "$@"
|
||||
+validate_device
|
||||
+get_paths
|
||||
+remove_devs
|
||||
+verify_removal
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Sat, 5 Jun 2021 01:01:45 +0200
|
||||
Subject: [PATCH] multipath-tools: add info about HPE Alletra 6000 and 9000
|
||||
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
README.alua | 2 +-
|
||||
libmultipath/hwtable.c | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/README.alua b/README.alua
|
||||
index b15eb487..5d2b1c64 100644
|
||||
--- a/README.alua
|
||||
+++ b/README.alua
|
||||
@@ -6,7 +6,7 @@ To enable ALUA, the following options should be changed:
|
||||
- EMC CLARiiON/VNX:
|
||||
"Failover Mode" should be changed to "4" or "Active-Active mode(ALUA)-failover mode 4"
|
||||
|
||||
-- HPE 3PAR:
|
||||
+- HPE 3PAR, Primera, and Alletra 9000:
|
||||
"Host:" should be changed to "Generic-ALUA Persona 2 (UARepLun, SESLun, ALUA)".
|
||||
|
||||
- Promise VTrak/Vess:
|
||||
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||
index 58fa7387..e884d8c7 100644
|
||||
--- a/libmultipath/hwtable.c
|
||||
+++ b/libmultipath/hwtable.c
|
||||
@@ -107,7 +107,7 @@ static struct hwentry default_hw[] = {
|
||||
* HPE
|
||||
*/
|
||||
{
|
||||
- /* 3PAR / Primera */
|
||||
+ /* 3PAR / Primera / Alletra 9000 */
|
||||
.vendor = "3PARdata",
|
||||
.product = "VV",
|
||||
.pgpolicy = GROUP_BY_PRIO,
|
||||
@@ -225,7 +225,7 @@ static struct hwentry default_hw[] = {
|
||||
.prio_name = PRIO_ALUA,
|
||||
},
|
||||
{
|
||||
- /* Nimble Storage */
|
||||
+ /* Nimble Storage / HPE Alletra 6000 */
|
||||
.vendor = "Nimble",
|
||||
.product = "Server",
|
||||
.hwhandler = "1 alua",
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Utkarsh Gupta <utkarsh.gupta@canonical.com>
|
||||
Date: Mon, 7 Jun 2021 20:08:24 +0530
|
||||
Subject: [PATCH] multipathd: don't start in containers
|
||||
|
||||
Do not attempt to start multipath-tools in containers,
|
||||
should switch for on-demand udev/socket based
|
||||
activation in the future.
|
||||
|
||||
Originally reported as:
|
||||
https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1823093
|
||||
|
||||
Author: Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
Co-Author: Utkarsh Gupta <utkarsh@debian.org>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/multipathd.service | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index 7d547fa7..0b2ac814 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -8,6 +8,7 @@ DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
ConditionKernelCommandLine=!nompath
|
||||
ConditionKernelCommandLine=!multipath=off
|
||||
+ConditionVirtualization=!container
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Thu, 20 May 2021 21:26:01 +0200
|
||||
Subject: [PATCH] libmultipath: fix build without LIBDM_API_DEFERRED
|
||||
|
||||
Build fails on distributions that don't support DM_DEFERRED_REMOVE
|
||||
(libdevmapper < 1.02.89). Fix it.
|
||||
|
||||
Resolves: https://github.com/opensvc/multipath-tools/issues/7
|
||||
Tested-by: Paul Menzel <pmenzel@molgen.mpg.de>
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/devmapper.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||
index 095cbc0c..47a6d60e 100644
|
||||
--- a/libmultipath/devmapper.c
|
||||
+++ b/libmultipath/devmapper.c
|
||||
@@ -49,6 +49,9 @@ static int dm_conf_verbosity;
|
||||
|
||||
#ifdef LIBDM_API_DEFERRED
|
||||
static int dm_cancel_remove_partmaps(const char * mapname);
|
||||
+#define __DR_UNUSED__ /* empty */
|
||||
+#else
|
||||
+#define __DR_UNUSED__ __attribute__((unused))
|
||||
#endif
|
||||
|
||||
static int do_foreach_partmaps(const char * mapname,
|
||||
@@ -384,7 +387,8 @@ libmp_dm_task_create(int task)
|
||||
#define do_deferred(x) ((x) == DEFERRED_REMOVE_ON || (x) == DEFERRED_REMOVE_IN_PROGRESS)
|
||||
|
||||
static int
|
||||
-dm_simplecmd (int task, const char *name, int no_flush, int need_sync, uint16_t udev_flags, int deferred_remove) {
|
||||
+dm_simplecmd (int task, const char *name, int no_flush, int need_sync,
|
||||
+ uint16_t udev_flags, int deferred_remove __DR_UNUSED__) {
|
||||
int r = 0;
|
||||
int udev_wait_flag = ((need_sync || udev_flags) &&
|
||||
(task == DM_DEVICE_RESUME ||
|
||||
@@ -1122,7 +1126,8 @@ dm_flush_map_nopaths(const char * mapname, int deferred_remove)
|
||||
#else
|
||||
|
||||
int
|
||||
-dm_flush_map_nopaths(const char * mapname, int deferred_remove)
|
||||
+dm_flush_map_nopaths(const char * mapname,
|
||||
+ int deferred_remove __attribute__((unused)))
|
||||
{
|
||||
return _dm_flush_map(mapname, 1, 0, 0, 0);
|
||||
}
|
||||
@@ -1573,7 +1578,7 @@ dm_cancel_deferred_remove (struct multipath *mpp)
|
||||
#else
|
||||
|
||||
int
|
||||
-dm_cancel_deferred_remove (struct multipath *mpp)
|
||||
+dm_cancel_deferred_remove (struct multipath *mpp __attribute__((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,128 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Wed, 30 Jun 2021 21:51:53 +0200
|
||||
Subject: [PATCH] libmultipath: use uint64_t for sg_id.lun
|
||||
|
||||
SCSI LUNs are 64bit unsigned integers, and have been exposed as such by
|
||||
the kernel for years. Storage using the full 8 bytes is fortunately rare.
|
||||
Still, we should handle this properly.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 10 +++++-----
|
||||
libmultipath/print.c | 2 +-
|
||||
libmultipath/prioritizers/weightedpath.c | 2 +-
|
||||
libmultipath/structs.c | 2 +-
|
||||
libmultipath/structs.h | 4 +++-
|
||||
5 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index bfe2f56c..e9f5703c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1427,7 +1427,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
attr_path = udev_device_get_sysname(parent);
|
||||
if (!attr_path)
|
||||
break;
|
||||
- if (sscanf(attr_path, "%i:%i:%i:%i",
|
||||
+ if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id,
|
||||
@@ -1462,7 +1462,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
/*
|
||||
* host / bus / target / lun
|
||||
*/
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1577,7 +1577,7 @@ ccw_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id) == 3) {
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1636,7 +1636,7 @@ cciss_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
*/
|
||||
pp->sg_id.lun = 0;
|
||||
pp->sg_id.channel = 0;
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1815,7 +1815,7 @@ scsi_ioctl_pathinfo (struct path * pp, int mask)
|
||||
attr_path = udev_device_get_sysname(parent);
|
||||
if (!attr_path)
|
||||
break;
|
||||
- if (sscanf(attr_path, "%i:%i:%i:%i",
|
||||
+ if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id,
|
||||
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||
index 3c69bf48..29ce499d 100644
|
||||
--- a/libmultipath/print.c
|
||||
+++ b/libmultipath/print.c
|
||||
@@ -392,7 +392,7 @@ snprint_hcil (char * buff, size_t len, const struct path * pp)
|
||||
if (!pp || pp->sg_id.host_no < 0)
|
||||
return snprintf(buff, len, "#:#:#:#");
|
||||
|
||||
- return snprintf(buff, len, "%i:%i:%i:%i",
|
||||
+ return snprintf(buff, len, "%i:%i:%i:%" PRIu64,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
pp->sg_id.scsi_id,
|
||||
diff --git a/libmultipath/prioritizers/weightedpath.c b/libmultipath/prioritizers/weightedpath.c
|
||||
index 916970df..650088b4 100644
|
||||
--- a/libmultipath/prioritizers/weightedpath.c
|
||||
+++ b/libmultipath/prioritizers/weightedpath.c
|
||||
@@ -101,7 +101,7 @@ int prio_path_weight(struct path *pp, char *prio_args)
|
||||
}
|
||||
|
||||
if (!strcmp(regex, HBTL)) {
|
||||
- sprintf(path, "%d:%d:%d:%d", pp->sg_id.host_no,
|
||||
+ sprintf(path, "%d:%d:%d:%" PRIu64, pp->sg_id.host_no,
|
||||
pp->sg_id.channel, pp->sg_id.scsi_id, pp->sg_id.lun);
|
||||
} else if (!strcmp(regex, DEV_NAME)) {
|
||||
strcpy(path, pp->dev);
|
||||
diff --git a/libmultipath/structs.c b/libmultipath/structs.c
|
||||
index 8751fc2b..6e5a1038 100644
|
||||
--- a/libmultipath/structs.c
|
||||
+++ b/libmultipath/structs.c
|
||||
@@ -96,7 +96,7 @@ alloc_path (void)
|
||||
pp->sg_id.host_no = -1;
|
||||
pp->sg_id.channel = -1;
|
||||
pp->sg_id.scsi_id = -1;
|
||||
- pp->sg_id.lun = -1;
|
||||
+ pp->sg_id.lun = SCSI_INVALID_LUN;
|
||||
pp->sg_id.proto_id = SCSI_PROTOCOL_UNSPEC;
|
||||
pp->fd = -1;
|
||||
pp->tpgs = TPGS_UNDEF;
|
||||
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
|
||||
index c8447e56..c52bcee1 100644
|
||||
--- a/libmultipath/structs.h
|
||||
+++ b/libmultipath/structs.h
|
||||
@@ -178,6 +178,8 @@ enum scsi_protocol {
|
||||
SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */
|
||||
};
|
||||
|
||||
+#define SCSI_INVALID_LUN ~0ULL
|
||||
+
|
||||
enum no_undef_states {
|
||||
NU_NO = -1,
|
||||
NU_UNDEF = 0,
|
||||
@@ -258,7 +260,7 @@ struct sg_id {
|
||||
int host_no;
|
||||
int channel;
|
||||
int scsi_id;
|
||||
- int lun;
|
||||
+ uint64_t lun;
|
||||
short h_cmd_per_lun;
|
||||
short d_queue_depth;
|
||||
enum scsi_protocol proto_id;
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Sat, 22 May 2021 21:17:36 +0200
|
||||
Subject: [PATCH] multipath-tools: Remove trailing/leading whitespaces
|
||||
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>"
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
libmultipath/configure.c | 2 +-
|
||||
libmultipath/devmapper.c | 4 ++--
|
||||
libmultipath/sysfs.c | 2 +-
|
||||
multipath/multipath.8 | 2 +-
|
||||
multipathd/cli_handlers.c | 2 +-
|
||||
multipathd/main.c | 2 +-
|
||||
7 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 91100a20..d0ec9b44 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -101,7 +101,7 @@ OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
$(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
+CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
||||
-DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
|
||||
-MMD -MP
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index 6ca1f4bb..a6ae3359 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -397,7 +397,7 @@ int setup_map(struct multipath *mpp, char *params, int params_size,
|
||||
start_io_err_stat_thread(vecs);
|
||||
|
||||
n_paths = VECTOR_SIZE(mpp->paths);
|
||||
- /*
|
||||
+ /*
|
||||
* assign paths to path groups -- start with no groups and all paths
|
||||
* in mpp->paths
|
||||
*/
|
||||
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||
index 47a6d60e..945e625b 100644
|
||||
--- a/libmultipath/devmapper.c
|
||||
+++ b/libmultipath/devmapper.c
|
||||
@@ -602,8 +602,8 @@ int dm_addmap_reload(struct multipath *mpp, char *params, int flush)
|
||||
return r;
|
||||
|
||||
/* If the resume failed, dm will leave the device suspended, and
|
||||
- * drop the new table, so doing a second resume will try using
|
||||
- * the original table */
|
||||
+ * drop the new table, so doing a second resume will try using
|
||||
+ * the original table */
|
||||
if (dm_is_suspended(mpp->alias))
|
||||
dm_simplecmd(DM_DEVICE_RESUME, mpp->alias, !flush, 1,
|
||||
udev_flags, 0);
|
||||
diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c
|
||||
index 7a2af1ea..9ff145f2 100644
|
||||
--- a/libmultipath/sysfs.c
|
||||
+++ b/libmultipath/sysfs.c
|
||||
@@ -358,7 +358,7 @@ bool sysfs_is_multipathed(struct path *pp, bool set_wwid)
|
||||
strchop(pp->wwid);
|
||||
}
|
||||
}
|
||||
- } else if (nr < 0)
|
||||
+ } else if (nr < 0)
|
||||
condlog(1, "%s: error reading from %s: %m",
|
||||
__func__, pathbuf);
|
||||
|
||||
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
||||
index 5b29a5d9..17df59f5 100644
|
||||
--- a/multipath/multipath.8
|
||||
+++ b/multipath/multipath.8
|
||||
@@ -225,7 +225,7 @@ Dry run, do not create or update devmaps.
|
||||
.TP
|
||||
.B \-e
|
||||
Enable all foreign libraries. This overrides the
|
||||
-.I enable_foreign
|
||||
+.I enable_foreign
|
||||
option from \fBmultipath.conf(5)\fR.
|
||||
.
|
||||
.TP
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 59d44b45..d70e1dbc 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -1215,7 +1215,7 @@ cli_reconfigure(void * v, char ** reply, int * len, void * data)
|
||||
|
||||
condlog(2, "reconfigure (operator)");
|
||||
|
||||
- rc = set_config_state(DAEMON_CONFIGURE);
|
||||
+ rc = set_config_state(DAEMON_CONFIGURE);
|
||||
if (rc == ETIMEDOUT) {
|
||||
condlog(2, "timeout starting reconfiguration");
|
||||
return 1;
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 2251e02c..bdd629e7 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2014,7 +2014,7 @@ static int check_path_reinstate_state(struct path * pp) {
|
||||
|
||||
/* If path became failed again or continue failed, should reset
|
||||
* path san_path_err_forget_rate and path dis_reinstate_time to
|
||||
- * start a new stable check.
|
||||
+ * start a new stable check.
|
||||
*/
|
||||
if ((pp->state != PATH_UP) && (pp->state != PATH_GHOST) &&
|
||||
(pp->state != PATH_DELAYED)) {
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Mon, 5 Apr 2021 00:12:58 +0200
|
||||
Subject: [PATCH] multipath-tools: make HUAWEI/XSG1 config work with alua and
|
||||
multibus
|
||||
|
||||
And add recommended no_path_retry and pgfailback values.
|
||||
|
||||
Info from:
|
||||
- RHEL https://download.huawei.com/edownload/e/download.do?actionFlag=download&nid=EDOC1100113070&partNo=6001&mid=SUPE_DOC&_t=1612885511000
|
||||
- SLES https://download.huawei.com/edownload/e/download.do?actionFlag=download&nid=EDOC1100117892&partNo=6001&mid=SUPE_DOC&_t=1612885538000
|
||||
|
||||
- without HyperMetro:
|
||||
vendor "HUAWEI"
|
||||
product "XSG1"
|
||||
path_grouping_policy multibus
|
||||
no_path_retry 15
|
||||
|
||||
- with HyperMetro:
|
||||
vendor "HUAWEI"
|
||||
product "XSG1"
|
||||
path_grouping_policy group_by_prio
|
||||
prio alua
|
||||
failback immediate
|
||||
no_path_retry 15
|
||||
|
||||
ALUA is only used with HyperMetro(cluster of two arrays).
|
||||
|
||||
Suggested-by: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Zhouweigang (Jack) <zhouweigang09@huawei.com>
|
||||
Cc: Zou Ming <zouming.zouming@huawei.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>"
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/hwtable.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||
index e884d8c7..2a896440 100644
|
||||
--- a/libmultipath/hwtable.c
|
||||
+++ b/libmultipath/hwtable.c
|
||||
@@ -1078,11 +1078,14 @@ static struct hwentry default_hw[] = {
|
||||
* Huawei
|
||||
*/
|
||||
{
|
||||
- /* OceanStor V3 */
|
||||
+ /* OceanStor V3-V6 */
|
||||
+ // This config works with multibus and ALUA
|
||||
+ // ALUA is required by HyperMetro
|
||||
.vendor = "HUAWEI",
|
||||
.product = "XSG1",
|
||||
.pgpolicy = GROUP_BY_PRIO,
|
||||
- .prio_name = PRIO_ALUA,
|
||||
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||
+ .no_path_retry = 15,
|
||||
},
|
||||
/*
|
||||
* Kove
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 15 Jul 2021 14:46:49 -0500
|
||||
Subject: [PATCH] multipath.conf: fix typo in ghost_delay description
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipath/multipath.conf.5 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 064e4826..d6b8c7f6 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1251,7 +1251,7 @@ The default is: in \fB/sys/block/<dev>/queue/max_sectors_kb\fR
|
||||
Sets the number of seconds that multipath will wait after creating a device
|
||||
with only ghost paths before marking it ready for use in systemd. This gives
|
||||
the active paths time to appear before the multipath runs the hardware handler
|
||||
-to switch the ghost paths to active ones. Setting this to \fI0\fR or \fIon\fR
|
||||
+to switch the ghost paths to active ones. Setting this to \fI0\fR or \fIno\fR
|
||||
makes multipath immediately mark a device with only ghost paths as ready.
|
||||
.RS
|
||||
.TP
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 15 Jul 2021 17:09:05 -0500
|
||||
Subject: [PATCH] mpathpersist: fail commands when no usable paths exist
|
||||
|
||||
"mpathpersist -oCK <reservation_key> <device>" will return success if it
|
||||
is run on devices with no usable paths, but nothing is actually done.
|
||||
The -L command will fail, but it should give up sooner, and with a more
|
||||
helpful error message.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmpathpersist/mpath_persist.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
|
||||
index 190e9707..26710e79 100644
|
||||
--- a/libmpathpersist/mpath_persist.c
|
||||
+++ b/libmpathpersist/mpath_persist.c
|
||||
@@ -604,7 +604,8 @@ int mpath_prout_common(struct multipath *mpp,int rq_servact, int rq_scope,
|
||||
return ret ;
|
||||
}
|
||||
}
|
||||
- return MPATH_PR_SUCCESS;
|
||||
+ condlog (0, "%s: no path available", mpp->wwid);
|
||||
+ return MPATH_PR_DMMP_ERROR;
|
||||
}
|
||||
|
||||
int send_prout_activepath(char * dev, int rq_servact, int rq_scope,
|
||||
@@ -663,6 +664,11 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope,
|
||||
|
||||
active_pathcount = count_active_paths(mpp);
|
||||
|
||||
+ if (active_pathcount == 0) {
|
||||
+ condlog (0, "%s: no path available", mpp->wwid);
|
||||
+ return MPATH_PR_DMMP_ERROR;
|
||||
+ }
|
||||
+
|
||||
struct threadinfo thread[active_pathcount];
|
||||
memset(thread, 0, sizeof(thread));
|
||||
for (i = 0; i < active_pathcount; i++){
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 16 Jul 2021 12:39:17 -0500
|
||||
Subject: [PATCH] multipath: print warning if multipathd is not running.
|
||||
|
||||
If multipath notices that multipath devices exist or were created, and
|
||||
multipathd is not running, it now prints a warning message, so users are
|
||||
notified of the issue.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/configure.c | 13 +++++++++++--
|
||||
libmultipath/configure.h | 1 +
|
||||
libmultipath/libmultipath.version | 5 +++++
|
||||
multipath/main.c | 5 +++++
|
||||
4 files changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index a6ae3359..eb76fbc4 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -1083,7 +1083,8 @@ deadmap (struct multipath * mpp)
|
||||
return 1; /* dead */
|
||||
}
|
||||
|
||||
-int check_daemon(void)
|
||||
+extern int
|
||||
+check_daemon(void)
|
||||
{
|
||||
int fd;
|
||||
char *reply;
|
||||
@@ -1138,6 +1139,8 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
struct config *conf;
|
||||
int allow_queueing;
|
||||
struct bitfield *size_mismatch_seen;
|
||||
+ bool map_processed = false;
|
||||
+ bool no_daemon = false;
|
||||
|
||||
/* ignore refwwid if it's empty */
|
||||
if (refwwid && !strlen(refwwid))
|
||||
@@ -1288,7 +1291,9 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
conf = get_multipath_config();
|
||||
allow_queueing = conf->allow_queueing;
|
||||
put_multipath_config(conf);
|
||||
- if (!is_daemon && !allow_queueing && !check_daemon()) {
|
||||
+ if (!is_daemon && !allow_queueing &&
|
||||
+ (no_daemon || !check_daemon())) {
|
||||
+ no_daemon = true;
|
||||
if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF &&
|
||||
mpp->no_path_retry != NO_PATH_RETRY_FAIL)
|
||||
condlog(3, "%s: multipathd not running, unset "
|
||||
@@ -1311,6 +1316,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
else
|
||||
remove_map(mpp, vecs->pathvec, vecs->mpvec,
|
||||
KEEP_VEC);
|
||||
+ map_processed = true;
|
||||
}
|
||||
/*
|
||||
* Flush maps with only dead paths (ie not in sysfs)
|
||||
@@ -1336,6 +1342,9 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
condlog(2, "%s: remove (dead)", alias);
|
||||
}
|
||||
}
|
||||
+ if (map_processed && !is_daemon && (no_daemon || !check_daemon()))
|
||||
+ condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
+
|
||||
ret = CP_OK;
|
||||
out:
|
||||
free(size_mismatch_seen);
|
||||
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
|
||||
index 70cf77a3..741066b3 100644
|
||||
--- a/libmultipath/configure.h
|
||||
+++ b/libmultipath/configure.h
|
||||
@@ -60,3 +60,4 @@ struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
||||
void trigger_paths_udev_change(struct multipath *mpp, bool is_mpath);
|
||||
void trigger_partitions_udev_change(struct udev_device *dev, const char *action,
|
||||
int len);
|
||||
+int check_daemon(void);
|
||||
diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version
|
||||
index 0cff3111..d8be5fd2 100644
|
||||
--- a/libmultipath/libmultipath.version
|
||||
+++ b/libmultipath/libmultipath.version
|
||||
@@ -274,3 +274,8 @@ global:
|
||||
local:
|
||||
*;
|
||||
};
|
||||
+
|
||||
+LIBMULTIPATH_5.1.0 {
|
||||
+global:
|
||||
+ check_daemon;
|
||||
+} LIBMULTIPATH_5.0.0;
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 8fc0e15f..33377147 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -180,6 +180,7 @@ get_dm_mpvec (enum mpath_cmds cmd, vector curmp, vector pathvec, char * refwwid)
|
||||
int i;
|
||||
struct multipath * mpp;
|
||||
int flags = (cmd == CMD_LIST_SHORT ? DI_NOIO : DI_ALL);
|
||||
+ bool maps_present = false;
|
||||
|
||||
if (dm_get_maps(curmp))
|
||||
return 1;
|
||||
@@ -212,11 +213,15 @@ get_dm_mpvec (enum mpath_cmds cmd, vector curmp, vector pathvec, char * refwwid)
|
||||
|
||||
if (cmd == CMD_CREATE)
|
||||
reinstate_paths(mpp);
|
||||
+
|
||||
+ maps_present = true;
|
||||
}
|
||||
|
||||
if (cmd == CMD_LIST_SHORT || cmd == CMD_LIST_LONG)
|
||||
print_foreign_topology(libmp_verbosity);
|
||||
|
||||
+ if (maps_present && !check_daemon())
|
||||
+ condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 16 Jul 2021 17:58:14 -0500
|
||||
Subject: [PATCH] libmultipath: remove unneeded code in coalesce_paths
|
||||
|
||||
The code at the end of coalesce_paths() removes a multipath device that
|
||||
was just created/reloaded, if none of its path devices have pp->dev set.
|
||||
This code is very old, and no longer has any actual effect. Multipath
|
||||
devices no longer get placed in pathvec without having pp->dev set. Even
|
||||
if they could, there's no point in creating/reloading the device and
|
||||
then immediately removing it.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/configure.c | 46 ----------------------------------------
|
||||
1 file changed, 46 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index eb76fbc4..df6ba725 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -1061,28 +1061,6 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||
return DOMAP_FAIL;
|
||||
}
|
||||
|
||||
-static int
|
||||
-deadmap (struct multipath * mpp)
|
||||
-{
|
||||
- int i, j;
|
||||
- struct pathgroup * pgp;
|
||||
- struct path * pp;
|
||||
-
|
||||
- if (!mpp->pg)
|
||||
- return 1;
|
||||
-
|
||||
- vector_foreach_slot (mpp->pg, pgp, i) {
|
||||
- if (!pgp->paths)
|
||||
- continue;
|
||||
-
|
||||
- vector_foreach_slot (pgp->paths, pp, j)
|
||||
- if (strlen(pp->dev))
|
||||
- return 0; /* alive */
|
||||
- }
|
||||
-
|
||||
- return 1; /* dead */
|
||||
-}
|
||||
-
|
||||
extern int
|
||||
check_daemon(void)
|
||||
{
|
||||
@@ -1318,30 +1296,6 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
KEEP_VEC);
|
||||
map_processed = true;
|
||||
}
|
||||
- /*
|
||||
- * Flush maps with only dead paths (ie not in sysfs)
|
||||
- * Keep maps with only failed paths
|
||||
- */
|
||||
- if (mpvec) {
|
||||
- vector_foreach_slot (newmp, mpp, i) {
|
||||
- char alias[WWID_SIZE];
|
||||
-
|
||||
- if (!deadmap(mpp))
|
||||
- continue;
|
||||
-
|
||||
- strlcpy(alias, mpp->alias, WWID_SIZE);
|
||||
-
|
||||
- vector_del_slot(newmp, i);
|
||||
- i--;
|
||||
- remove_map(mpp, vecs->pathvec, vecs->mpvec, KEEP_VEC);
|
||||
-
|
||||
- if (dm_flush_map(alias))
|
||||
- condlog(2, "%s: remove failed (dead)",
|
||||
- alias);
|
||||
- else
|
||||
- condlog(2, "%s: remove (dead)", alias);
|
||||
- }
|
||||
- }
|
||||
if (map_processed && !is_daemon && (no_daemon || !check_daemon()))
|
||||
condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 29 Jul 2021 13:16:57 -0500
|
||||
Subject: [PATCH] libmultipath: deal with dynamic PTHREAD_STACK_MIN
|
||||
|
||||
Starting in glibc-2.34 (commit 5d98a7da), PTHREAD_STACK_MIN is defined
|
||||
as sysconf(_SC_THREAD_STACK_MIN) if _GNU_SOURCE is defined. sysconf()
|
||||
returns a long and can, at least in theory, return -1. This change
|
||||
causes compilation to fail in setup_thread_attr() due to a comparision
|
||||
with different signedness, since stacksize is a size_t.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/util.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/util.c b/libmultipath/util.c
|
||||
index 0e37f3ff..17f8fcc6 100644
|
||||
--- a/libmultipath/util.c
|
||||
+++ b/libmultipath/util.c
|
||||
@@ -223,8 +223,8 @@ setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached)
|
||||
|
||||
ret = pthread_attr_init(attr);
|
||||
assert(ret == 0);
|
||||
- if (stacksize < PTHREAD_STACK_MIN)
|
||||
- stacksize = PTHREAD_STACK_MIN;
|
||||
+ if (PTHREAD_STACK_MIN > 0 && stacksize < (size_t)PTHREAD_STACK_MIN)
|
||||
+ stacksize = (size_t)PTHREAD_STACK_MIN;
|
||||
ret = pthread_attr_setstacksize(attr, stacksize);
|
||||
assert(ret == 0);
|
||||
if (detached) {
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 13 Apr 2017 07:22:23 -0500
|
||||
Subject: [PATCH] RH: fixup udev rules for redhat
|
||||
|
||||
The multipath rules need to run after scsi_id is run. This means moving
|
||||
them after 60-persistent-storage.rules for redhat. Redhat also uses a
|
||||
different naming scheme for partitions than SuSE.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
kpartx/kpartx.rules | 2 +-
|
||||
multipath/Makefile | 4 ++--
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index d0ec9b44..2a75dc9c 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -55,7 +55,7 @@ endif
|
||||
prefix =
|
||||
exec_prefix = $(prefix)
|
||||
usr_prefix = $(prefix)
|
||||
-bindir = $(exec_prefix)/sbin
|
||||
+bindir = $(exec_prefix)/usr/sbin
|
||||
libudevdir = $(prefix)/$(SYSTEMDPATH)/udev
|
||||
udevrulesdir = $(libudevdir)/rules.d
|
||||
multipathdir = $(TOPDIR)/libmultipath
|
||||
diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
|
||||
index d7527d7d..0e0d70d5 100644
|
||||
--- a/kpartx/kpartx.rules
|
||||
+++ b/kpartx/kpartx.rules
|
||||
@@ -36,6 +36,6 @@ LABEL="mpath_kpartx_end"
|
||||
GOTO="kpartx_end"
|
||||
|
||||
LABEL="run_kpartx"
|
||||
-RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
||||
+RUN+="/sbin/kpartx -un /dev/$name"
|
||||
|
||||
LABEL="kpartx_end"
|
||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
||||
index 0828a8f7..b9bbb3cf 100644
|
||||
--- a/multipath/Makefile
|
||||
+++ b/multipath/Makefile
|
||||
@@ -24,7 +24,7 @@ install:
|
||||
$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
|
||||
- $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
|
||||
+ $(INSTALL_PROGRAM) -m 644 $(EXEC).rules $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir)
|
||||
$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
|
||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
|
||||
@@ -33,7 +33,7 @@ install:
|
||||
uninstall:
|
||||
$(RM) $(DESTDIR)$(bindir)/$(EXEC)
|
||||
$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
|
||||
- $(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
|
||||
+ $(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
|
||||
$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
|
||||
$(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
|
||||
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 15 Oct 2014 10:39:30 -0500
|
||||
Subject: [PATCH] RH: don't start without a config file
|
||||
|
||||
If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist
|
||||
all devices when running multipath. A completely blank configuration file
|
||||
is almost never what users want. Also, people may have the multipath
|
||||
packages installed but don't want to use them. This patch provides a
|
||||
simple way to disable multipath. Simply removing or renaming
|
||||
/etc/multipath.conf will keep multipath from doing anything.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/config.c | 13 +++++++++++++
|
||||
libmultipath/config.h | 1 +
|
||||
multipath/multipath.rules | 1 +
|
||||
multipathd/multipathd.8 | 2 ++
|
||||
multipathd/multipathd.service | 1 +
|
||||
5 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||
index 30046a17..5f35c3d3 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -895,6 +895,19 @@ int _init_config (const char *file, struct config *conf)
|
||||
goto out;
|
||||
}
|
||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
|
||||
+ } else {
|
||||
+ condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
||||
+ if (conf->blist_devnode == NULL) {
|
||||
+ conf->blist_devnode = vector_alloc();
|
||||
+ if (!conf->blist_devnode) {
|
||||
+ condlog(0, "cannot allocate blacklist\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+ if (store_ble(conf->blist_devnode, ".*", ORIGIN_NO_CONFIG)) {
|
||||
+ condlog(0, "cannot store default no-config blacklist\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
}
|
||||
|
||||
conf->processed_main_config = 1;
|
||||
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||
index 933fe0d1..5f01c1fc 100644
|
||||
--- a/libmultipath/config.h
|
||||
+++ b/libmultipath/config.h
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#define ORIGIN_DEFAULT 0
|
||||
#define ORIGIN_CONFIG 1
|
||||
+#define ORIGIN_NO_CONFIG 2
|
||||
|
||||
enum devtypes {
|
||||
DEV_NONE,
|
||||
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
||||
index 9df11a95..0486bf70 100644
|
||||
--- a/multipath/multipath.rules
|
||||
+++ b/multipath/multipath.rules
|
||||
@@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath"
|
||||
ENV{nompath}=="?*", GOTO="end_mpath"
|
||||
IMPORT{cmdline}="multipath"
|
||||
ENV{multipath}=="off", GOTO="end_mpath"
|
||||
+TEST!="/etc/multipath.conf", GOTO="end_mpath"
|
||||
|
||||
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
||||
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
|
||||
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
|
||||
index 048a838d..8bd47a80 100644
|
||||
--- a/multipathd/multipathd.8
|
||||
+++ b/multipathd/multipathd.8
|
||||
@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy.
|
||||
This daemon executes the external \fBmultipath\fR tool when events occur.
|
||||
In turn, the multipath tool signals the multipathd daemon when it is done with
|
||||
devmap reconfiguration, so that it can refresh its failed path list.
|
||||
+
|
||||
+In this Linux distribution, multipathd does not run unless a /etc/multipath.conf file exists.
|
||||
.
|
||||
.
|
||||
.\" ----------------------------------------------------------------------------
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index 0b2ac814..6d57c7e8 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -4,6 +4,7 @@ Wants=systemd-udev-trigger.service systemd-udev-settle.service
|
||||
Before=iscsi.service iscsid.service lvm2-activation-early.service
|
||||
Before=local-fs-pre.target blk-availability.service shutdown.target
|
||||
After=multipathd.socket systemd-udev-trigger.service systemd-udev-settle.service
|
||||
+ConditionPathExists=/etc/multipath.conf
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
ConditionKernelCommandLine=!nompath
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 19 Apr 2017 06:10:01 -0500
|
||||
Subject: [PATCH] RH: use rpm optflags if present
|
||||
|
||||
Use the passed in optflags when compiling as an RPM, and keep the
|
||||
default flags as close as possible to the current fedora flags, while
|
||||
still being generic.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 24 ++++++++++++++++++------
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 2a75dc9c..db35feb6 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -92,16 +92,28 @@ TEST_CC_OPTION = $(shell \
|
||||
echo "$(2)"; \
|
||||
fi)
|
||||
|
||||
-STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
|
||||
WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
|
||||
WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
|
||||
|
||||
-OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
-WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
+ifndef RPM_OPT_FLAGS
|
||||
+ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
+ OPTFLAGS := -O2 -g -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
|
||||
+ $(STACKPROT) -grecord-gcc-switches \
|
||||
+ -fasynchronous-unwind-tables --param=ssp-buffer-size=4
|
||||
+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1)
|
||||
+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
|
||||
+ endif
|
||||
+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-annobin-cc1 && echo 1),1)
|
||||
+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
|
||||
+ endif
|
||||
+else
|
||||
+ OPTFLAGS := $(RPM_OPT_FLAGS) --param=ssp-buffer-size=4
|
||||
+endif
|
||||
+WARNFLAGS := -Werror -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
- $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
+ $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) \
|
||||
+ -Wstrict-prototypes
|
||||
CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
||||
-DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
|
||||
-MMD -MP
|
||||
@@ -139,4 +151,4 @@ check_file = $(shell \
|
||||
|
||||
%.o: %.c
|
||||
@echo building $@ because of $?
|
||||
- $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||
+ $(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 25 Mar 2021 13:05:10 -0500
|
||||
Subject: [PATCH] RH: make parse_vpd_pg83 match scsi_id output
|
||||
|
||||
Red Hat sets ID_SERIAL based on the result of scsi_id, instead of using
|
||||
the result of sg_inq and 55-scsi-sg3_id.rules. Make parse_vpd_pg83 match
|
||||
that.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 18 ++----------------
|
||||
1 file changed, 2 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index e9f5703c..7c1bcdf0 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1135,12 +1135,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
||||
naa_prio = 7;
|
||||
break;
|
||||
case 2:
|
||||
- /* IEEE Extended: Prio 6 */
|
||||
- naa_prio = 6;
|
||||
- break;
|
||||
case 3:
|
||||
- /* IEEE Locally assigned: Prio 1 */
|
||||
- naa_prio = 1;
|
||||
+ /* IEEE Extended or Locally assigned: Prio 6 */
|
||||
+ naa_prio = 6;
|
||||
break;
|
||||
default:
|
||||
/* Default: no priority */
|
||||
@@ -1159,17 +1156,6 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
||||
vpd = d;
|
||||
}
|
||||
break;
|
||||
- case 0x8:
|
||||
- /* SCSI Name: Prio 3 */
|
||||
- if (memcmp(d + 4, "eui.", 4) &&
|
||||
- memcmp(d + 4, "naa.", 4) &&
|
||||
- memcmp(d + 4, "iqn.", 4))
|
||||
- break;
|
||||
- if (prio < 3) {
|
||||
- prio = 3;
|
||||
- vpd = d;
|
||||
- }
|
||||
- break;
|
||||
case 0x1:
|
||||
/* T-10 Vendor ID: Prio 2 */
|
||||
if (prio < 2) {
|
||||
|
|
@ -1,54 +1,37 @@
|
|||
Name: device-mapper-multipath
|
||||
Version: 0.8.6
|
||||
Release: 5%{?dist}
|
||||
Version: 0.13.0
|
||||
Release: 2%{?dist}
|
||||
Summary: Tools to manage multipath devices using device-mapper
|
||||
License: GPLv2
|
||||
# readline uses GPL-3.0-only
|
||||
License: GPL-2.0-only AND GPL-3.0-only
|
||||
URL: http://christophe.varoqui.free.fr/
|
||||
|
||||
# The source for this package was pulled from upstream's git repo. Use the
|
||||
# following command to generate the tarball
|
||||
# curl -L https://github.com/opensvc/multipath-tools/archive/0.8.6.tar.gz -o multipath-tools-0.8.6.tgz
|
||||
Source0: multipath-tools-0.8.6.tgz
|
||||
# curl -L https://github.com/opensvc/multipath-tools/archive/0.13.0.tar.gz -o multipath-tools-0.13.0.tgz
|
||||
Source0: multipath-tools-0.13.0.tgz
|
||||
Source1: multipath.conf
|
||||
Patch0001: 0001-libmultipath-fix-memory-leak-in-checker_cleanup_thre.patch
|
||||
Patch0002: 0002-multipathd-fix-compilation-issue-with-liburcu-0.8.patch
|
||||
Patch0003: 0003-multipathd-don-t-fail-to-remove-path-once-the-map-is.patch
|
||||
Patch0004: 0004-multipathd-remove-duplicate-orphan_paths-in-flush_ma.patch
|
||||
Patch0005: 0005-multipathd-fix-ev_remove_path-return-code-handling.patch
|
||||
Patch0006: 0006-multipath-free-vectors-in-configure.patch
|
||||
Patch0007: 0007-kpartx-Don-t-leak-memory-when-getblock-returns-NULL.patch
|
||||
Patch0008: 0008-multipathd-don-t-rescan_path-on-wwid-change-in-uev_u.patch
|
||||
Patch0009: 0009-multipathd-cli_handlers-cleanup-setting-reply-length.patch
|
||||
Patch0010: 0010-multipathd-cli_getprkey-fix-return-value.patch
|
||||
Patch0011: 0011-multipath-tools-enable-Wformat-overflow-2.patch
|
||||
Patch0012: 0012-libdmmp-use-KBUILD_BUILD_TIMESTAMP-when-building-man.patch
|
||||
Patch0013: 0013-multipath-tools-add-info-about-HPE-Alletra-6000-and-.patch
|
||||
Patch0014: 0014-multipathd-don-t-start-in-containers.patch
|
||||
Patch0015: 0015-libmultipath-fix-build-without-LIBDM_API_DEFERRED.patch
|
||||
Patch0016: 0016-libmultipath-use-uint64_t-for-sg_id.lun.patch
|
||||
Patch0017: 0017-multipath-tools-Remove-trailing-leading-whitespaces.patch
|
||||
Patch0018: 0018-multipath-tools-make-HUAWEI-XSG1-config-work-with-al.patch
|
||||
Patch0019: 0019-multipath.conf-fix-typo-in-ghost_delay-description.patch
|
||||
Patch0020: 0020-mpathpersist-fail-commands-when-no-usable-paths-exis.patch
|
||||
Patch0021: 0021-multipath-print-warning-if-multipathd-is-not-running.patch
|
||||
Patch0022: 0022-libmultipath-remove-unneeded-code-in-coalesce_paths.patch
|
||||
Patch0023: 0023-libmultipath-deal-with-dynamic-PTHREAD_STACK_MIN.patch
|
||||
Patch0024: 0024-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0025: 0025-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0026: 0026-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0027: 0027-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0028: 0028-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0029: 0029-RH-add-mpathconf.patch
|
||||
Patch0030: 0030-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0031: 0031-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0032: 0032-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0033: 0033-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
Patch0001: 0001-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0002: 0002-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0003: 0003-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0004: 0004-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0005: 0005-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0006: 0006-RH-add-mpathconf.patch
|
||||
Patch0007: 0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0008: 0008-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0009: 0009-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0010: 0010-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
Patch0011: 0011-RH-add-scsi-device-handlers-to-modules-load.d.patch
|
||||
Patch0012: 0012-RH-compile-with-libreadline-support.patch
|
||||
Patch0013: 0013-RH-Add-mpathcleanup.patch
|
||||
|
||||
# runtime
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: kpartx = %{version}-%{release}
|
||||
Requires: device-mapper >= 1.02.96
|
||||
Requires: userspace-rcu
|
||||
Requires: readline
|
||||
Requires: libmount
|
||||
Requires(post): systemd-units
|
||||
Requires(preun): systemd-units
|
||||
Requires(postun): systemd-units
|
||||
|
|
@ -70,6 +53,7 @@ BuildRequires: readline-devel, ncurses-devel
|
|||
BuildRequires: systemd-units, systemd-devel
|
||||
BuildRequires: json-c-devel, perl-interpreter, pkgconfig, gcc
|
||||
BuildRequires: userspace-rcu-devel
|
||||
BuildRequires: libmount-devel
|
||||
BuildRequires: make
|
||||
|
||||
%description
|
||||
|
|
@ -81,8 +65,8 @@ The tools are :
|
|||
|
||||
%package libs
|
||||
Summary: The %{name} modules and shared library
|
||||
# only libmpathcmd is LGPLv2+
|
||||
License: GPLv2 and LGPLv2+
|
||||
# only libmpathcmd is LGPL-2.1-or-later AND LGPL-2.0-or-later
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-2.0-or-later
|
||||
|
||||
%description libs
|
||||
The %{name}-libs provides the path checker
|
||||
|
|
@ -107,7 +91,8 @@ kpartx manages partition creation and removal for device-mapper devices.
|
|||
|
||||
%package -n libdmmp
|
||||
Summary: device-mapper-multipath C API library
|
||||
License: GPLv3+
|
||||
# Automatically converted from old format: GPLv3+ - review is highly recommended.
|
||||
License: GPL-3.0-or-later
|
||||
Requires: json-c
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
|
|
@ -126,11 +111,10 @@ This package contains the files needed to develop applications that use
|
|||
device-mapper-multipath's libdmmp C API library
|
||||
|
||||
%prep
|
||||
%autosetup -n multipath-tools-0.8.6 -p1
|
||||
%autosetup -n multipath-tools-0.13.0 -p1
|
||||
cp %{SOURCE1} .
|
||||
|
||||
%build
|
||||
%define _sbindir /usr/sbin
|
||||
%define _libdir /usr/%{_lib}
|
||||
%define _libmpathdir %{_libdir}/multipath
|
||||
%define _pkgconfdir %{_libdir}/pkgconfig
|
||||
|
|
@ -141,11 +125,12 @@ cp %{SOURCE1} .
|
|||
bindir=%{_sbindir} \
|
||||
syslibdir=%{_libdir} \
|
||||
usrlibdir=%{_libdir} \
|
||||
libdir=%{_libmpathdir} \
|
||||
rcdir=%{_initrddir} \
|
||||
plugindir=%{_libmpathdir} \
|
||||
mandir=%{_mandir} \
|
||||
unitdir=%{_unitdir} \
|
||||
includedir=%{_includedir} \
|
||||
pkgconfdir=%{_pkgconfdir}
|
||||
pkgconfdir=%{_pkgconfdir} \
|
||||
tmpfilesdir=%{_tmpfilesdir}
|
||||
|
||||
# tree fix up
|
||||
install -d %{buildroot}/etc/multipath
|
||||
|
|
@ -160,7 +145,7 @@ rm -rf %{buildroot}/%{_initrddir}
|
|||
|
||||
%postun
|
||||
if [ $1 -ge 1 ] ; then
|
||||
/sbin/multipathd forcequeueing daemon > /dev/null 2>&1 || :
|
||||
multipathd forcequeueing daemon > /dev/null 2>&1 || :
|
||||
fi
|
||||
%systemd_postun_with_restart multipathd.service
|
||||
|
||||
|
|
@ -170,30 +155,39 @@ fi
|
|||
/bin/systemctl --quiet is-enabled multipathd.service >/dev/null 2>&1 && /bin/systemctl reenable multipathd.service ||:
|
||||
|
||||
%files
|
||||
%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0
|
||||
%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 LICENSES/GPL-3.0
|
||||
%{_sbindir}/multipath
|
||||
%{_sbindir}/multipathd
|
||||
%{_sbindir}/multipathc
|
||||
%{_sbindir}/mpathconf
|
||||
%{_sbindir}/mpathcleanup
|
||||
%{_sbindir}/mpathpersist
|
||||
%{_unitdir}/multipathd.service
|
||||
%{_unitdir}/multipathd-queueing.service
|
||||
%{_unitdir}/multipathd.socket
|
||||
%{_mandir}/man5/multipath.conf.5.gz
|
||||
%{_mandir}/man8/multipath.8.gz
|
||||
%{_mandir}/man8/multipathd.8.gz
|
||||
%{_mandir}/man8/mpathconf.8.gz
|
||||
%{_mandir}/man8/mpathpersist.8.gz
|
||||
%{_mandir}/man5/multipath.conf.5*
|
||||
%{_mandir}/man8/multipath.8*
|
||||
%{_mandir}/man8/multipathd.8*
|
||||
%{_mandir}/man8/multipathc.8*
|
||||
%{_mandir}/man8/mpathconf.8*
|
||||
%{_mandir}/man8/mpathpersist.8*
|
||||
%config /usr/lib/udev/rules.d/62-multipath.rules
|
||||
%config /usr/lib/udev/rules.d/11-dm-mpath.rules
|
||||
%config /usr/lib/udev/rules.d/99-z-dm-mpath-late.rules
|
||||
%dir %{_modulesloaddir}
|
||||
%{_modulesloaddir}/scsi_dh.conf
|
||||
%{_tmpfilesdir}/multipath.conf
|
||||
%doc README.md
|
||||
%doc README.alua
|
||||
%doc multipath.conf
|
||||
%dir /etc/multipath
|
||||
|
||||
%files libs
|
||||
%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0
|
||||
%license LICENSES/GPL-2.0 LICENSES/LGPL-2.0 LICENSES/LGPL-2.1
|
||||
%doc README.md
|
||||
%{_libdir}/libmultipath.so
|
||||
%{_libdir}/libmultipath.so.*
|
||||
%{_libdir}/libmpathutil.so
|
||||
%{_libdir}/libmpathutil.so.*
|
||||
%{_libdir}/libmpathpersist.so.*
|
||||
%{_libdir}/libmpathcmd.so.*
|
||||
%{_libdir}/libmpathvalid.so.*
|
||||
|
|
@ -210,15 +204,15 @@ fi
|
|||
%{_includedir}/mpath_cmd.h
|
||||
%{_includedir}/mpath_persist.h
|
||||
%{_includedir}/mpath_valid.h
|
||||
%{_mandir}/man3/mpath_persistent_reserve_in.3.gz
|
||||
%{_mandir}/man3/mpath_persistent_reserve_out.3.gz
|
||||
%{_mandir}/man3/mpath_persistent_reserve_in.3*
|
||||
%{_mandir}/man3/mpath_persistent_reserve_out.3*
|
||||
|
||||
%files -n kpartx
|
||||
%license LICENSES/GPL-2.0
|
||||
%doc README.md
|
||||
%{_sbindir}/kpartx
|
||||
/usr/lib/udev/kpartx_id
|
||||
%{_mandir}/man8/kpartx.8.gz
|
||||
%{_mandir}/man8/kpartx.8*
|
||||
%config /usr/lib/udev/rules.d/11-dm-parts.rules
|
||||
%config /usr/lib/udev/rules.d/66-kpartx.rules
|
||||
%config /usr/lib/udev/rules.d/68-del-part-nodes.rules
|
||||
|
|
@ -236,10 +230,239 @@ fi
|
|||
%dir %{_includedir}/libdmmp
|
||||
%{_includedir}/libdmmp/*
|
||||
%{_mandir}/man3/dmmp_*
|
||||
%{_mandir}/man3/libdmmp.h.3.gz
|
||||
%{_mandir}/man3/libdmmp.h.3*
|
||||
%{_pkgconfdir}/libdmmp.pc
|
||||
|
||||
%changelog
|
||||
* Thu Nov 13 2025 Benjamin Marzinski <bmarzins@redhat.com> - 0.13.0-2
|
||||
- Move STI tests to TMT
|
||||
|
||||
* Tue Nov 4 2025 Benjamin Marzinski <bmarzins@redhat.com> - 0.13.0-1
|
||||
- Update source to upstream release 0.13.0
|
||||
* Previous patches 0001-0004 are included in the tarball
|
||||
- Install /lib/systemd/system/multipathd-queueing.service
|
||||
- Rename redhat patches
|
||||
* Previous patches 0005-0017 are now patches 0001-0013
|
||||
|
||||
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Thu Feb 27 2025 Benjamin Marzinski <bmarzins@redhat.com> - 0.11.1-1
|
||||
- Update source to upstream staging branch for 0.11.1 plus additional
|
||||
stable branch patches.
|
||||
* Previous patches 0001-0032 are included in the tarball
|
||||
- Rename redhat patches
|
||||
* Previous patches 0033-0045 are now patches 0005-0017
|
||||
|
||||
* Sat Feb 1 2025 Benjamin Marzinski <bmarzins@redhat.com> - 0.10.0-5
|
||||
- Update source to upstream staging branch for 0.10.y (will be 0.10.2 when
|
||||
merged).
|
||||
- Rebase redhat patches
|
||||
|
||||
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.10.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Sun Jan 12 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 0.10.0-3
|
||||
- Rebuilt for the bin-sbin merge (2nd attempt)
|
||||
|
||||
* Thu Aug 29 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.10.0-2
|
||||
- update CI tests.
|
||||
|
||||
* Thu Aug 29 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.10.0-1
|
||||
- Update source to upstream version 0.9.9
|
||||
* Previous patch 0014-multipathd-fix-flush-check-in-flush_map.patch is
|
||||
included in the source tarball
|
||||
- Rebase redhat patches
|
||||
|
||||
* Fri Aug 9 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.9-6
|
||||
- Add 0014-multipathd-fix-null-pointer-dereference-in-uev_updat.patch
|
||||
* multipath features tracking on failed removes
|
||||
|
||||
* Mon Jul 29 2024 Miroslav Suchý <msuchy@redhat.com> - 0.9.9-5
|
||||
- convert license to SPDX
|
||||
|
||||
* Thu Jul 25 2024 Miroslav Suchý <msuchy@redhat.com> - 0.9.9-4
|
||||
- convert license to SPDX
|
||||
|
||||
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.9-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Tue Jul 09 2024 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 0.9.9-2
|
||||
- Rebuilt for the bin-sbin merge
|
||||
|
||||
* Thu Jun 13 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.9-1
|
||||
- Update source to upstream version 0.9.9
|
||||
* Previous patches 0001-0044 are included in the source tarball
|
||||
- Rename redhat patches
|
||||
* Previous patches 0045-0057 are now patches 0001-0013
|
||||
|
||||
* Mon May 20 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.8-1
|
||||
- Update source to upstream version 0.9.8 plus latest staging branch
|
||||
* Previous patches 0014 & 0015 are included in the source tarball
|
||||
* patches 0001-0044 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0001-0013 are now patches 0045-0057
|
||||
- Install /lib/udev/rules.d/99-z-dm-mpath-late.rules
|
||||
|
||||
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.7-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.7-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Tue Jan 16 2024 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.7-5
|
||||
- Add 0014-multipathd-fix-null-pointer-dereference-in-uev_updat.patch
|
||||
* Fix auto_resize code to avoid a segfault
|
||||
- Add 0015-multipathd-fix-auto-resize-configuration.patch
|
||||
* Fix auto_resize default value
|
||||
|
||||
* Thu Nov 30 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.7-4
|
||||
- Use modulesloaddir macro for installing scsi_dh.conf
|
||||
|
||||
* Wed Nov 29 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.7-3
|
||||
- Fix multipath_conf_syntax test
|
||||
- Fix restate_module test
|
||||
|
||||
* Tue Nov 28 2023 Paul Donohue <git@PaulSD.com> - 0.9.7-2
|
||||
- Modify 0006-RH-add-mpathconf.patch
|
||||
- Modify 0008-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
* Fix find_multipaths values in docs and mpathconf
|
||||
|
||||
* Tue Nov 21 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.7-1
|
||||
- Update source to upstream version 0.9.7
|
||||
* Previous patches 0001-0040 are included in the source tarball
|
||||
- Rename redhat patches
|
||||
* Previous patches 0041-0053 are now patches 0001-0013
|
||||
- Remove /usr/lib/modules-load.d/multipath.conf
|
||||
* has been replaced with modprobe@dm_multipath.service unit Wants.
|
||||
|
||||
* Fri Sep 22 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.6-1
|
||||
- Update to the head of the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0001-0012 are now patches 0041-0052
|
||||
- Add 0053-RH-Add-mpathcleanup.patch
|
||||
* add mpathcleanup program
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.5-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Tue May 16 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.5-1
|
||||
- Update to the latest upstream release
|
||||
* Previous patches 0001-0015 are included in the source tarball
|
||||
- Rename redhat patches
|
||||
* Previous patches 0016-0027 are now patches 0001-0012
|
||||
|
||||
* Thu Feb 2 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.4-2
|
||||
- Update to the head of the upstream staging branch
|
||||
* Patches 0011-0015 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0011-0022 are now patches 0016-0027
|
||||
|
||||
* Thu Jan 26 2023 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.4-1
|
||||
- Update to the head of the upstream staging branch
|
||||
* Previous patches 0001-0032 are included in the source tarball
|
||||
* Patches 0001-0010 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0033-0044 are now patches 0011-0022
|
||||
- Add dependency on libmount
|
||||
|
||||
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.3-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Tue Nov 15 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.3-1
|
||||
- Update to the head of the upstream staging branch
|
||||
* Previous patches 0001-0042 are included in the source tarball
|
||||
* Patches 0001-0032 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0043-0053 are now patches 0033-0043
|
||||
- Change back to using readline instead of libedit
|
||||
* The code the uses readline has been isolated from the code that
|
||||
is licensed gpl v2 only.
|
||||
- Add libmpathutil libraries to spec file
|
||||
- Add multipathc program to spec file
|
||||
- Add multipath.conf systemd tempfile configuration to spec file
|
||||
- Misc spec file cleanups
|
||||
|
||||
* Fri Aug 19 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.0-3
|
||||
- Update to the head of the upstream staging branch
|
||||
* Patches 0005-0042 are from the upstream staging branch
|
||||
* Previous patches 0005 & 0006 are now patches 0023 & 0005
|
||||
- Rename redhat patches
|
||||
* Previous patches 0007-0017 are now patches 0043-0053
|
||||
- Change from using readline to libedit
|
||||
* readline is licensed GPL v3, and multipathd includes code
|
||||
licensed gpl v2.
|
||||
- Remove README.alua
|
||||
* information moved to README.md
|
||||
|
||||
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Wed Jul 13 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.9.0-1
|
||||
- Update source to upstream version 0.9.0
|
||||
* Previous patches 0001-0005 are included in the commit.
|
||||
* This version deprecates multiple options: mutlipath_dir, config_dir, and
|
||||
getuid_callout, along with the "default_" prefixed alternate names for the
|
||||
default section parameters.
|
||||
- Add patches from upstream staging branch
|
||||
* Patches 0001-0006 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0006-0016 are now patches 0007-0017
|
||||
|
||||
* Mon Mar 28 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.9-1
|
||||
- Update source to upstream version 0.8.9
|
||||
* Previous patches 0001-0024 & 0035 are included in the commit.
|
||||
- Add patches from upstream staging branch
|
||||
* Patches 0001-0005 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0025-0034 are now patches 0006-0015
|
||||
- Combine redhat patches
|
||||
* Previous patches 0036 & 0037 are now part of patch 0011
|
||||
- Add 0016-RH-add-scsi-device-handlers-to-modules-load.d.patch
|
||||
- Spec file changes
|
||||
* Install multipath.conf and scsi_dh.conf to /usr/lib/modules-load.d
|
||||
|
||||
* Mon Feb 7 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-8
|
||||
- Add 0036-RH-add-support-to-mpathconf-for-setting-arbitrary-de.patch
|
||||
* add the ability for mpathconf to set arbitray options with --option
|
||||
- Add 0037-RH-add-support-to-mpathconf-for-setting-recheck_wwid.patch
|
||||
* add --recheck_wwid option to mpathconf
|
||||
|
||||
* Wed Jan 26 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-7
|
||||
- Add 0035-libmultipath-use-asprintf-to-allocate-prefixed_uuid.patch
|
||||
- Resolves: bz #2045309
|
||||
|
||||
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.7-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Jan 6 2022 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-5
|
||||
- Modify 0030-RH-add-mpathconf.patch
|
||||
* fix setting property_blacklist with no blacklist_exceptions section
|
||||
|
||||
* Mon Dec 13 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-4
|
||||
- Update to the head of the upstream staging branch
|
||||
* Patches 0013 - 0024 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0013-0022 are now patches 0025-0034
|
||||
|
||||
* Thu Oct 28 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-3
|
||||
- Update to the head of the upstream staging branch
|
||||
* Patches 0011 & 0012 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0011-0020 are now patches 0013-0022
|
||||
|
||||
* Wed Oct 6 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-2
|
||||
- Modify 0013-RH-don-t-start-without-a-config-file.patch
|
||||
* add condtion to multipathd.socket as well
|
||||
|
||||
* Wed Oct 6 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.7-1
|
||||
- Update source to upstream version 0.8.7
|
||||
* Previous patches 0001-0023 are included in the commit.
|
||||
- Add patches from upstream staging branch
|
||||
* Patches 0001-0010 are from the upstream staging branch
|
||||
- Rename redhat patches
|
||||
* Previous patches 0024-0033 are now patches 0011-0020
|
||||
|
||||
* Fri Jul 30 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.6-5
|
||||
- Update to the head of the upstream staging branch plus redhat patches
|
||||
* Patches 0016-0018 are from the upstream staging branch
|
||||
|
|
|
|||
58
plans/multipath.fmf
Normal file
58
plans/multipath.fmf
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
summary: basic functionality tests
|
||||
|
||||
provision:
|
||||
hardware:
|
||||
memory: ">= 2 GB"
|
||||
|
||||
prepare:
|
||||
how: install
|
||||
package:
|
||||
- device-mapper-multipath
|
||||
- perl
|
||||
|
||||
discover:
|
||||
how: shell
|
||||
tests:
|
||||
- name: medium_error_scsi_debug
|
||||
path: /tests/medium_error_scsi_debug
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: squelch_scsi_id
|
||||
path: /tests/squelch_scsi_id
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: multipathd_oom
|
||||
path: /tests/multipathd_oom
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: user_friendly_names
|
||||
path: /tests/user_friendly_names
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: kpartx_4k_aligned
|
||||
path: /tests/kpartx_4k_aligned
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: bindings
|
||||
path: /tests/bindings
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: restate_module
|
||||
path: /tests/restate_module
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: find_multipaths
|
||||
path: /tests/find_multipaths
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: multipath_conf_syntax
|
||||
path: /tests/multipath_conf_syntax
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
- name: alias_clash
|
||||
path: /tests/alias_clash
|
||||
test: ./main.sh
|
||||
duration: 15m
|
||||
|
||||
execute:
|
||||
how: tmt
|
||||
2
sources
2
sources
|
|
@ -1,2 +1,2 @@
|
|||
SHA512 (multipath-tools-0.8.6.tgz) = 82e5b7307e599ba6b059679c3987a442fb5be4885f0a27c260a99a07cb336b88d48e314b4ec951944e0200e4731522d8da043d98fa566857ecc6d100791c0e38
|
||||
SHA512 (multipath-tools-0.13.0.tgz) = 75c84524ee27590b8b751ea500898a44e5ac3d58d55be6bcab919d0d423049db3a4466fcb9135705cf63ba074416973bb651255063269e9f682f11d21ba57e59
|
||||
SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942
|
||||
|
|
|
|||
|
|
@ -18,40 +18,110 @@
|
|||
# Author: Lin Li <lilin@redhat.com>
|
||||
|
||||
#set -x
|
||||
source ../include/ec.sh || exit 200
|
||||
|
||||
source ../include/tc.sh || exit 200
|
||||
tlog "running $0"
|
||||
|
||||
trun "service multipathd stop"
|
||||
rpm -q device-mapper-multipath || yum install -y device-mapper-multipath
|
||||
trun "mpathconf --enable --with_multipathd y --user_friendly_names y"
|
||||
trun "service multipathd status"
|
||||
sleep 5
|
||||
cleanup ()
|
||||
{
|
||||
local retries
|
||||
if pidof multipathd; then
|
||||
tlog "stopping multipathd"
|
||||
trun "systemctl stop multipathd.service || pkill multipathd"
|
||||
sleep 1
|
||||
fi
|
||||
retries=10
|
||||
while pidof multipathd; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to stop multipath"
|
||||
tend
|
||||
fi
|
||||
tlog "waiting for multipathd to stop"
|
||||
sleep 2
|
||||
pidof multipathd && pkill multipathd
|
||||
done
|
||||
trun "multipath -l -v1"
|
||||
retries=10
|
||||
while [[ -n `multipath -l -v1` ]]; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to remove deviece"
|
||||
tend
|
||||
fi
|
||||
tlog "removing multipath device"
|
||||
trun "udevadm settle"
|
||||
trun "multipath -DF"
|
||||
sleep 2
|
||||
done
|
||||
if lsmod | grep -q "^scsi_debug"; then
|
||||
tlog "removing scsi_debug module"
|
||||
tok "rmmod scsi_debug"
|
||||
fi
|
||||
trun "rm -f /etc/multipath.conf"
|
||||
}
|
||||
|
||||
trun "multipath -F"
|
||||
sleep 5
|
||||
terr "modprobe -r scsi_debug"
|
||||
terr "modprobe scsi_debug num_tgts=1 vpd_use_hostno=0 add_host=2 delay=20 \
|
||||
max_luns=2 no_lun_0=1"
|
||||
sleep 60
|
||||
assert ()
|
||||
{
|
||||
local cmd="$*"
|
||||
_trun_ "$cmd" 0
|
||||
if test $? -eq 0; then
|
||||
tpass_ "$cmd" ;
|
||||
else
|
||||
tfail_ "$cmd" ;
|
||||
cleanup ;
|
||||
tend ;
|
||||
fi
|
||||
}
|
||||
|
||||
disk_path=$(get_scsi_debug_devices)
|
||||
disk=$(basename $disk_path)
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk)
|
||||
setup_config ()
|
||||
{
|
||||
trun "mpathconf --enable --user_friendly_names y"
|
||||
sed -i '/^blacklist[[:space:]]*{/ a\
|
||||
device {\
|
||||
vendor ".*"\
|
||||
product ".*"\
|
||||
}
|
||||
' /etc/multipath.conf
|
||||
cat << _EOF_ >> /etc/multipath.conf
|
||||
|
||||
blacklist_exceptions {
|
||||
device {
|
||||
vendor Linux
|
||||
product scsi_debug
|
||||
}
|
||||
}
|
||||
_EOF_
|
||||
trun "cat /etc/multipath.conf"
|
||||
}
|
||||
|
||||
do_reconfigure ()
|
||||
{
|
||||
tok "multipathd reconfigure"
|
||||
sleep 5
|
||||
}
|
||||
|
||||
rpm -q device-mapper-multipath || dnf install -y device-mapper-multipath
|
||||
cleanup
|
||||
setup_config
|
||||
trun "rm -r /etc/multipath/bindings"
|
||||
trun "modprobe scsi_debug vpd_use_hostno=0 add_host=2"
|
||||
sleep 5
|
||||
trun "systemctl start multipathd.service"
|
||||
while multipathd show daemon | grep -qv idle; do
|
||||
tlog "waiting for multipathd to start"
|
||||
sleep 1
|
||||
done
|
||||
|
||||
trun 'multipathd show maps raw format "%n"'
|
||||
mpath_name=`multipathd show maps raw format "%n" | head -1`
|
||||
assert "[[ -n $mpath_name ]] && [[ $mpath_name != ok ]]"
|
||||
new_alias="mpath_test_$$"
|
||||
|
||||
trun "sed -i 's/$mpath_name/$new_alias/' /etc/multipath/bindings"
|
||||
trun "multipath -r"
|
||||
sleep 5
|
||||
tok "[[ -b /dev/mapper/$new_alias ]]"
|
||||
tok is_mpath $new_alias
|
||||
sleep 5
|
||||
do_reconfigure
|
||||
trun 'multipathd show maps raw format "%n"'
|
||||
mpath_name=`multipathd show maps raw format "%n" | head -1`
|
||||
assert "[[ $mpath_name = $new_alias ]]"
|
||||
|
||||
trun "multipath -F"
|
||||
sleep 5
|
||||
trun "modprobe -r scsi_debug"
|
||||
trun "service multipathd stop"
|
||||
sleep 3
|
||||
trun "multipath -W"
|
||||
trun "rm /etc/multipath/bindings"
|
||||
cleanup
|
||||
tend
|
||||
|
|
|
|||
|
|
@ -1,49 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2016 Red Hat, Inc.
|
||||
# #
|
||||
# # This program is free software: you can redistribute it and/or modify
|
||||
# # it under the terms of the GNU General Public License as published by
|
||||
# # the Free Software Foundation, either version 3 of the License, or
|
||||
# # (at your option) any later version.
|
||||
# #
|
||||
# # This program is distributed in the hope that it will be useful,
|
||||
# # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# # GNU General Public License for more details.
|
||||
# #
|
||||
# # You should have received a copy of the GNU General Public License
|
||||
# # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# # Author: Lin Li <lilin@redhat.com>
|
||||
|
||||
.PHONY: all install download clean
|
||||
|
||||
BUILT_FILES=
|
||||
|
||||
FILES=$(METADATA) Makefile PURPOSE main.sh
|
||||
|
||||
run: $(FILES) build
|
||||
./main.sh
|
||||
|
||||
build: $(BUILT_FILES)
|
||||
chmod a+x ./main.sh
|
||||
|
||||
clean:
|
||||
rm -f *~ *.rpm $(BUILT_FILES)
|
||||
|
||||
include /usr/share/rhts/lib/rhts-make.include
|
||||
|
||||
$(METADATA): Makefile
|
||||
@touch $(METADATA)
|
||||
@echo "Owner: LiLin <lilin@redhat.com>" > $(METADATA)
|
||||
@echo "Name: $(TEST)" >> $(METADATA)
|
||||
@echo "Path: $(TEST_DIR)" >> $(METADATA)
|
||||
@echo "License: GPLv3" >> $(METADATA)
|
||||
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
|
||||
@echo "Description: find_multipaths" >> $(METADATA)
|
||||
@echo "TestTime: 15m" >> $(METADATA)
|
||||
@echo "RunFor: device-mapper-multipath" >> $(METADATA)
|
||||
@echo "Requires: device-mapper-multipath" >> $(METADATA)
|
||||
|
||||
rhts-lint $(METADATA)
|
||||
|
|
@ -18,38 +18,92 @@
|
|||
# Author: Lin Li <lilin@redhat.com>
|
||||
|
||||
#set -x
|
||||
source ../include/ec.sh || exit 200
|
||||
source ../include/tc.sh || exit 200
|
||||
tlog "running $0"
|
||||
|
||||
remove_devices ()
|
||||
{
|
||||
local retries
|
||||
retries=10
|
||||
while [[ -n `multipath -l -v1` ]]; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to remove devices"
|
||||
cleanup
|
||||
tend
|
||||
fi
|
||||
tlog "removing multipath devices"
|
||||
trun "udevadm settle"
|
||||
trun "multipath -F"
|
||||
sleep 2
|
||||
done
|
||||
}
|
||||
|
||||
cleanup ()
|
||||
{
|
||||
trun "multipathd disablequeueing maps"
|
||||
trun "service multipathd stop"
|
||||
sleep 5
|
||||
trun "udevadm settle"
|
||||
trun "multipath -F"
|
||||
sleep 5
|
||||
trun "modprobe -r scsi_debug"
|
||||
local retries
|
||||
if pidof multipathd; then
|
||||
tlog "stopping multipathd"
|
||||
trun "systemctl stop multipathd.service || pkill multipathd"
|
||||
sleep 1
|
||||
fi
|
||||
retries=10
|
||||
while pidof multipathd; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to stop multipath"
|
||||
tend
|
||||
fi
|
||||
tlog "waiting for multipathd to stop"
|
||||
sleep 2
|
||||
pidof multipathd && pkill multipathd
|
||||
done
|
||||
trun "multipath -l -v1"
|
||||
retries=10
|
||||
while [[ -n `multipath -l -v1` ]]; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to remove devices"
|
||||
tend
|
||||
fi
|
||||
tlog "removing multipath devices"
|
||||
trun "udevadm settle"
|
||||
trun "multipath -DF"
|
||||
sleep 2
|
||||
done
|
||||
if lsmod | grep -q "^scsi_debug"; then
|
||||
tlog "removing scsi_debug module"
|
||||
tok "rmmod scsi_debug"
|
||||
fi
|
||||
trun "rm -f /etc/multipath.conf"
|
||||
trun "rm -f /etc/multipath/wwids"
|
||||
trun "rm -r /etc/multipath/bindings"
|
||||
}
|
||||
|
||||
tlog "running $0"
|
||||
assert ()
|
||||
{
|
||||
local cmd="$*"
|
||||
_trun_ "$cmd" 0
|
||||
if test $? -eq 0; then
|
||||
tpass_ "$cmd" ;
|
||||
else
|
||||
tfail_ "$cmd" ;
|
||||
cleanup ;
|
||||
tend ;
|
||||
fi
|
||||
}
|
||||
|
||||
# which not set find_multipaths yes, so multipath always create a multipath device for single device
|
||||
# so stop service and reconfig with --find_multipaths y, and reload/start the service again.
|
||||
rpm -q device-mapper-multipath || yum install -y device-mapper-multipath
|
||||
setup_config ()
|
||||
{
|
||||
trun "mpathconf --enable --user_friendly_names y --find_multipaths y"
|
||||
sed -i '/^blacklist[[:space:]]*{/ a\
|
||||
device {\
|
||||
vendor ".*"\
|
||||
product ".*"\
|
||||
}
|
||||
' /etc/multipath.conf
|
||||
cat << _EOF_ >> /etc/multipath.conf
|
||||
|
||||
# test with find_multipath=y, will not multipath for the single device; reload/start the service to enable the config
|
||||
cleanup
|
||||
trun "rm -f /etc/multipath.conf"
|
||||
trun "mpathconf --enable --user_friendly_names y --find_multipaths y --with_multipathd n"
|
||||
sed -i '/^blacklist[[:space:]]*{/ a\
|
||||
device {\n vendor ".*"\n product ".*"\n }
|
||||
' /etc/multipath.conf
|
||||
if grep -qw blacklist_exceptions /etc/multipath.conf ; then
|
||||
sed -i '/^blacklist_exceptions[[:space:]]*{/ a\
|
||||
device {\n vendor Linux\n product scsi_debug\n }
|
||||
' /etc/multipath.conf
|
||||
else
|
||||
cat << _EOF_ >> /etc/multipath.conf
|
||||
blacklist_exceptions {
|
||||
device {
|
||||
vendor Linux
|
||||
|
|
@ -57,56 +111,69 @@ blacklist_exceptions {
|
|||
}
|
||||
}
|
||||
_EOF_
|
||||
fi
|
||||
trun "service multipathd start"
|
||||
trun "cat /etc/multipath.conf"
|
||||
}
|
||||
|
||||
do_reconfigure ()
|
||||
{
|
||||
trun "cat /etc/multipath.conf"
|
||||
tok "multipathd reconfigure"
|
||||
sleep 5
|
||||
}
|
||||
|
||||
trun "rpm -q device-mapper-multipath || dnf install -y device-mapper-multipath"
|
||||
cleanup
|
||||
setup_config
|
||||
|
||||
# test with find_multipath=y, will not multipath the single device
|
||||
trun "modprobe scsi_debug"
|
||||
sleep 5
|
||||
trun "systemctl start multipathd.service"
|
||||
while multipathd show daemon | grep -qv idle; do
|
||||
tlog "waiting for multipathd to start"
|
||||
sleep 1
|
||||
done
|
||||
trun 'multipathd show paths raw format "%d %m"'
|
||||
trun 'cat /etc/multipath/wwids'
|
||||
mpath_name=`multipathd show paths raw format "%m" | head -1`
|
||||
tok "[[ $mpath_name = '[orphan]' ]]"
|
||||
remove_devices
|
||||
|
||||
# test with find_multipath=n, will multipath the single device
|
||||
trun 'mpathconf --find_multipaths n'
|
||||
do_reconfigure
|
||||
trun 'multipathd show paths raw format "%d %m"'
|
||||
trun 'cat /etc/multipath/wwids'
|
||||
mpath_name=`multipathd show paths raw format "%m" | head -1`
|
||||
tok "[[ -n $mpath_name ]] && [[ $mpath_name != '[orphan]' ]]"
|
||||
remove_devices
|
||||
|
||||
# test with find_multipath=y, with multipath single device with known WWID
|
||||
trun 'mpathconf --find_multipaths y'
|
||||
do_reconfigure
|
||||
trun 'multipathd show paths raw format "%d %m"'
|
||||
trun 'cat /etc/multipath/wwids'
|
||||
mpath_name=`multipathd show paths raw format "%m" | head -1`
|
||||
tok "[[ -n $mpath_name ]] && [[ $mpath_name != '[orphan]' ]]"
|
||||
remove_devices
|
||||
|
||||
# Clear WWID, test with find_multipath=y, will not multipath single device
|
||||
trun "multipath -W"
|
||||
cat /etc/multipath/wwids
|
||||
trun "multipath"
|
||||
disk_path=$(get_scsi_debug_devices)
|
||||
disk_node=$(basename $disk_path)
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk_node)
|
||||
tok '[[ $mpath_name = "[orphan]" ]]'
|
||||
|
||||
# test with find_multipath=n, will multipath for the single device
|
||||
trun "mpathconf --user_friendly_names y --find_multipaths n --with_multipathd y"
|
||||
sleep 5
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk_node)
|
||||
tok "is_mpath $mpath_name"
|
||||
|
||||
# flush new created path
|
||||
trun "multipath -F"
|
||||
sleep 1
|
||||
|
||||
# test with find_multipath=y, A path has the same WWID as a multipath device that was previously created
|
||||
trun "mpathconf --user_friendly_names y --find_multipaths y --with_multipathd y"
|
||||
sleep 5
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk_node)
|
||||
tok "is_mpath $mpath_name"
|
||||
trun "multipath -F"
|
||||
sleep 1
|
||||
|
||||
# Clear wwid, test with find_multipath=y, will not multipath for the single device
|
||||
trun "multipath -W"
|
||||
trun "service multipathd reload"
|
||||
sleep 5
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk_node)
|
||||
tok '[[ $mpath_name = "[orphan]" ]]'
|
||||
|
||||
trun "multipath -F"
|
||||
sleep 5
|
||||
trun "modprobe -r scsi_debug"
|
||||
do_reconfigure
|
||||
trun 'multipathd show paths raw format "%d %m"'
|
||||
trun 'cat /etc/multipath/wwids'
|
||||
mpath_name=`multipathd show paths raw format "%m" | head -1`
|
||||
tok "[[ $mpath_name = '[orphan]' ]]"
|
||||
remove_devices
|
||||
assert 'rmmod scsi_debug'
|
||||
|
||||
# test find_multipaths=y create device for paths have same wwid
|
||||
tok "modprobe scsi_debug num_tgts=1 vpd_use_hostno=0 add_host=2 delay=20 max_luns=2 no_lun_0=1"
|
||||
sleep 10
|
||||
disk_paths=$(get_scsi_debug_devices)
|
||||
disk_node=$(basename $disk_paths)
|
||||
mpath_name=$(get_mpath_disk_by_scsi_device $disk_node)
|
||||
tok "is_mpath $mpath_name"
|
||||
trun "modprobe scsi_debug vpd_use_hostno=0 add_host=2"
|
||||
sleep 5
|
||||
trun 'multipathd show paths raw format "%d %m"'
|
||||
trun 'cat /etc/multipath/wwids'
|
||||
mpath_name=`multipathd show paths raw format "%m" | head -1`
|
||||
tok "[[ -n $mpath_name ]] && [[ $mpath_name != '[orphan]' ]]"
|
||||
|
||||
cleanup
|
||||
trun "multipath -W"
|
||||
cat /etc/multipath/wwids
|
||||
tend
|
||||
|
|
|
|||
|
|
@ -44,9 +44,12 @@ function _init (){
|
|||
}
|
||||
|
||||
function _destroy (){
|
||||
sleep 10
|
||||
Cmd "multipath -F"
|
||||
Cmd "multipathd disablequeueing maps"
|
||||
sleep 5
|
||||
Cmd "multipath -DF -R2"
|
||||
Cmd "service multipathd stop"
|
||||
sleep 5
|
||||
Cmd "udevadm settle"
|
||||
Cmd "modprobe -r scsi_debug"
|
||||
}
|
||||
|
||||
|
|
@ -174,10 +177,7 @@ AA
|
|||
fi
|
||||
#setup scsi_debug
|
||||
echo "INFO: Loading scsi_debug module for simulation of mpath"
|
||||
modprobe scsi_debug \
|
||||
num_tgts=1 vpd_use_hostno=0 \
|
||||
add_host=4 delay=20 \
|
||||
max_luns=2 no_lun_0=1 2>&1 1>/dev/null
|
||||
modprobe scsi_debug vpd_use_hostno=0 add_host=2
|
||||
|
||||
echo "INFO: Waiting for udev to create /dev/sdX"
|
||||
sleep 15s #wait for udev to create /dev/sdX
|
||||
|
|
@ -189,8 +189,6 @@ AA
|
|||
#enable multipath for scsi_debug.
|
||||
cat << AA > /etc/multipath.conf
|
||||
defaults {
|
||||
#Enable multibus is for mutlbus testing
|
||||
path_grouping_policy multibus
|
||||
user_friendly_names yes
|
||||
}
|
||||
blacklist {
|
||||
|
|
|
|||
|
|
@ -16,47 +16,51 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Author: LiLin <lilin@redhat.com>
|
||||
source ../include/tc.sh || exit 200
|
||||
|
||||
function cleanup()
|
||||
cleanup()
|
||||
{
|
||||
sleep 5
|
||||
udevadm settle
|
||||
multipath -F
|
||||
trun "multipath -DF"
|
||||
sleep 5
|
||||
modprobe -r scsi_debug
|
||||
|
||||
return 0
|
||||
trun "modprobe -r scsi_debug"
|
||||
}
|
||||
|
||||
yum -y install device-mapper device-mapper-multipath
|
||||
mpathconf --enable
|
||||
service multipathd stop
|
||||
modprobe scsi_debug num_tgts=1 vpd_use_hostno=0 add_host=2 delay=20 max_luns=2 no_lun_0=1 opts=2
|
||||
assert ()
|
||||
{
|
||||
local cmd="$*"
|
||||
_trun_ "$cmd" 0
|
||||
if test $? -eq 0; then
|
||||
tpass_ "$cmd" ;
|
||||
else
|
||||
tfail_ "$cmd" ;
|
||||
cleanup ;
|
||||
tend ;
|
||||
fi
|
||||
}
|
||||
|
||||
tlog "running $0"
|
||||
rpm -q device-mapper-multipath || dnf install -y device-mapper-multipath
|
||||
trun "multipathd disablequeueing maps"
|
||||
cleanup
|
||||
trun "service multipathd stop"
|
||||
trun "rm -f /etc/multipath.conf"
|
||||
trun "mpathconf --enable"
|
||||
trun "modprobe scsi_debug vpd_use_hostno=0 add_host=2 opts=2"
|
||||
sleep 5
|
||||
multipath > /dev/null
|
||||
trun "multipath"
|
||||
sleep 5
|
||||
trun "multipath -l"
|
||||
mpathdev=`multipath -l | grep scsi_debug | awk '{print $1}' | head -1`
|
||||
if [ -z "$mpathdev" ]; then
|
||||
echo "------- FAIL, no multipath device created -----"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
assert "[[ -n \"$mpathdev\" ]]"
|
||||
before_active=`multipath -l $mpathdev | grep "active undef" | wc -l`
|
||||
tlog "before active = ${before_active}"
|
||||
|
||||
IO_error=`dd if=/dev/zero of=/dev/mapper/$mpathdev bs=1024 seek=2330 count=10 2>&1 | grep -o "Input/output error" `
|
||||
if [ -n "$IO_error" ];then
|
||||
after_active=`multipath -l $mpathdev | grep "active undef" | wc -l`
|
||||
if [ "$before_active" -eq "$after_active" ]; then
|
||||
echo "------- PASS, a medium error, correctly generated an I/O error and did not fail paths -----"
|
||||
cleanup
|
||||
exit 0
|
||||
else
|
||||
echo "------- FAIL, paths failed -----"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "------- FAIL, did not generate an I/O error -----"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
assert "[[ -n \"$IO_error\" ]]"
|
||||
after_active=`multipath -l $mpathdev | grep "active undef" | wc -l`
|
||||
tlog "after active = ${after_active}"
|
||||
assert "[[ \"$before_active\" -eq \"$after_active\" ]]"
|
||||
cleanup
|
||||
tend
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ tok "multipath -ll | grep mypath"
|
|||
|
||||
# test wrong alias keyword
|
||||
trun "sed -i 's/alias.*$/alia mypath/g' /etc/multipath.conf"
|
||||
tok "multipath 2>&1 | grep 'invalid keyword: alia'"
|
||||
tok "multipath 2>&1 | grep 'invalid keyword in the multipath section: alia'"
|
||||
trun "multipath -r"
|
||||
tok "multipath -ll | grep mpath"
|
||||
trun "sed -i 's/alia.*$/alias mypath/g' /etc/multipath.conf"
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
|
||||
standard-inventory-qcow2:
|
||||
qemu:
|
||||
m: 2G
|
||||
|
|
@ -48,10 +48,8 @@ rpm -q device-mapper-multipath || yum install -y device-mapper-multipath
|
|||
tlog "device-mapper-multipath is installed"
|
||||
# cleanup existing devices
|
||||
trun "rm /etc/multipath.conf"
|
||||
trun "mpathconf --enable --with_module y"
|
||||
sed -i '/^defaults[[:space:]]*{/ a\
|
||||
max_polling_interval 10
|
||||
' /etc/multipath.conf
|
||||
trun "mpathconf --enable --with_module y --option max_polling_interval:10"
|
||||
trun "mpathconf --option detect_pgpolicy_use_tpg:yes"
|
||||
trun "service multipathd stop"
|
||||
trun "multipath -F"
|
||||
sleep 5
|
||||
|
|
@ -69,7 +67,7 @@ tlog "Checking if active path count equals 2"
|
|||
assert "[[ $pathcount -eq 2 ]]"
|
||||
|
||||
tlog "offline one path device"
|
||||
pathname=`multipathd show paths raw format "%d %m" | grep ${mpathdev} | head -1 | awk '{print $1}'`
|
||||
pathname=`multipathd show paths raw format "%d %m %p" | grep ${mpathdev} | sort -k 3n | head -1 | awk '{print $1}'`
|
||||
tlog "path to offline: ${pathname}"
|
||||
trun "echo 'offline' > /sys/block/${pathname}/device/state"
|
||||
tlog "waiting for multipathd to fail path"
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
---
|
||||
# No tests suitable for atomic environment
|
||||
# No tests suitable for container environment
|
||||
|
||||
# Tests suitable for classic environment
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
tests:
|
||||
- medium_error_scsi_debug:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- squelch_scsi_id:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- multipathd_oom:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- user_friendly_names:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- kpartx_4k_aligned:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- bindings:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- restate_module:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- find_multipaths:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- multipath_conf_syntax:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
- alias_clash:
|
||||
run: ./main.sh
|
||||
timeout: 15m
|
||||
required_packages:
|
||||
- device-mapper-multipath
|
||||
- perl
|
||||
|
|
@ -17,50 +17,125 @@
|
|||
|
||||
# Author: Lin Li <lilin@redhat.com>
|
||||
|
||||
source ../include/ec.sh || exit 200
|
||||
|
||||
source ../include/tc.sh || exit 200
|
||||
tlog "running $0"
|
||||
|
||||
trun "rpm -q device-mapper-multipath || yum install -y device-mapper-multipath"
|
||||
trun "mpathconf --enable --with_multipathd y --user_friendly_names y"
|
||||
cleanup ()
|
||||
{
|
||||
local retries
|
||||
if pidof multipathd; then
|
||||
tlog "stopping multipathd"
|
||||
trun "systemctl stop multipathd.service || pkill multipathd"
|
||||
sleep 1
|
||||
fi
|
||||
retries=10
|
||||
while pidof multipathd; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to stop multipath"
|
||||
tend
|
||||
fi
|
||||
tlog "waiting for multipathd to stop"
|
||||
sleep 2
|
||||
pidof multipathd && pkill multipathd
|
||||
done
|
||||
trun "multipath -l -v1"
|
||||
retries=10
|
||||
while [[ -n `multipath -l -v1` ]]; do
|
||||
((retries--))
|
||||
if [[ $retries -le 0 ]]; then
|
||||
tfail_ "failed to remove deviece"
|
||||
tend
|
||||
fi
|
||||
tlog "removing multipath device"
|
||||
trun "udevadm settle"
|
||||
trun "multipath -DF"
|
||||
sleep 2
|
||||
done
|
||||
if lsmod | grep -q "^scsi_debug"; then
|
||||
tlog "removing scsi_debug module"
|
||||
tok "rmmod scsi_debug"
|
||||
fi
|
||||
trun "rm -f /etc/multipath.conf"
|
||||
}
|
||||
|
||||
# backup the /etc/multipath.conf
|
||||
trun "cp /etc/multipath.conf /etc/multipath.conf.$$"
|
||||
trun "multipath -F"
|
||||
assert ()
|
||||
{
|
||||
local cmd="$*"
|
||||
_trun_ "$cmd" 0
|
||||
if test $? -eq 0; then
|
||||
tpass_ "$cmd" ;
|
||||
else
|
||||
tfail_ "$cmd" ;
|
||||
cleanup ;
|
||||
tend ;
|
||||
fi
|
||||
}
|
||||
|
||||
trun "modprobe scsi_debug num_tgts=1 vpd_use_hostno=0 add_host=2 delay=20 \
|
||||
max_luns=2 no_lun_0=1"
|
||||
trun "multipath"
|
||||
# wwid shown slowly on s390x by the script framework, but normally when run by multipath command directly
|
||||
# so extend sleep time
|
||||
sleep 20
|
||||
setup_config ()
|
||||
{
|
||||
trun "mpathconf --enable --user_friendly_names y"
|
||||
sed -i '/^blacklist[[:space:]]*{/ a\
|
||||
device {\
|
||||
vendor ".*"\
|
||||
product ".*"\
|
||||
}
|
||||
' /etc/multipath.conf
|
||||
cat << _EOF_ >> /etc/multipath.conf
|
||||
|
||||
disk=$(get_scsi_debug_devices)
|
||||
disk=$(basename $disk)
|
||||
wwid=$(get_wwid_of_disk $disk)
|
||||
mpath=$(get_mpath_disk_by_scsi_device $disk)
|
||||
blacklist_exceptions {
|
||||
device {
|
||||
vendor Linux
|
||||
product scsi_debug
|
||||
}
|
||||
}
|
||||
|
||||
# user_friendly_names = yes and mpath=test
|
||||
#cur_dir=/mnt/tests/kernel/storage/multipath/user_friendly_names/
|
||||
#cur_dir=/home/test/scratch/device-mapper-multipath/user_friendly_names
|
||||
trun "cat multipath.conf.yes | sed "s/your_wwid/$wwid/g" > /etc/multipath.conf"
|
||||
trun "cat -n /etc/multipath.conf"
|
||||
trun "multipath -r"
|
||||
echo ">>> Verify 'test ($wwid)' is present ..."
|
||||
trun "multipath -ll"
|
||||
tok "multipath -ll | egrep \"^test\""
|
||||
multipaths {
|
||||
multipath {
|
||||
wwid TEST_WWID
|
||||
alias test
|
||||
}
|
||||
}
|
||||
_EOF_
|
||||
trun "cat /etc/multipath.conf"
|
||||
}
|
||||
|
||||
# user_friendly_names = no
|
||||
trun "cat multipath.conf.no > /etc/multipath.conf"
|
||||
trun "multipath -r"
|
||||
echo ">>> Verify 'test' is gone but '$wwid' present ..."
|
||||
trun "multipath -ll"
|
||||
tok "multipath -ll | egrep \"^$wwid\""
|
||||
sleep 10
|
||||
tok "multipath -F $wwid"
|
||||
sleep 10
|
||||
trun "modprobe -r scsi_debug"
|
||||
do_reconfigure ()
|
||||
{
|
||||
trun "cat /etc/multipath.conf"
|
||||
tok "multipathd reconfigure"
|
||||
sleep 5
|
||||
}
|
||||
|
||||
trun "cp /etc/multipath.conf.$$ /etc/multipath.conf"
|
||||
trun "multipath -F; multipath"
|
||||
trun "rpm -q device-mapper-multipath || dnf install -y device-mapper-multipath"
|
||||
cleanup
|
||||
setup_config
|
||||
trun "rm -r /etc/multipath/bindings"
|
||||
trun "modprobe scsi_debug vpd_use_hostno=0 add_host=2"
|
||||
sleep 5
|
||||
trun "systemctl start multipathd.service"
|
||||
while multipathd show daemon | grep -qv idle; do
|
||||
tlog "waiting for multipathd to start"
|
||||
sleep 1
|
||||
done
|
||||
trun 'multipathd show maps raw format "%n %w"'
|
||||
# verify user_friendly_name
|
||||
tok 'multipathd show maps raw format "%n" | head -1 | grep -q mpath'
|
||||
wwid=`multipathd show maps raw format "%w" | head -1`
|
||||
assert "[[ -n $wwid ]] && [[ $wwid != ok ]]"
|
||||
sed -i 's/TEST_WWID/'"$wwid"'/' /etc/multipath.conf
|
||||
do_reconfigure
|
||||
trun 'multipathd show maps raw format "%n %w"'
|
||||
# verify configured alias takes precedence over user_friendly_name
|
||||
tok 'multipathd show maps raw format "%n" | head -1 | grep -q test'
|
||||
trun "mpathconf --user_friendly_names n"
|
||||
do_reconfigure
|
||||
trun 'multipathd show maps raw format "%n %w"'
|
||||
# verify configured alias takes precedence over wwid name
|
||||
tok 'multipathd show maps raw format "%n" | head -1 | grep -q test'
|
||||
sed -i 's/'"$wwid"'/TEST_WWID/' /etc/multipath.conf
|
||||
do_reconfigure
|
||||
trun 'multipathd show maps raw format "%n %w"'
|
||||
tok 'multipathd show maps raw format "%n" | head -1 | grep -q '"$wwid"
|
||||
cleanup
|
||||
tend
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
defaults {
|
||||
user_friendly_names no
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
defaults {
|
||||
user_friendly_names yes
|
||||
}
|
||||
|
||||
multipaths {
|
||||
multipath {
|
||||
wwid your_wwid
|
||||
alias test
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue