device-mapper-multipath-0.7.3-1
Update Source to upstream 0.7.3 release * Previous patch 0001 is included in this commit, and 0002 was solved in a different manner causing some change to previous patch 0003 * Previous patches 0003-0010 are now patches 0007-0014 Add 0001-mpathpersist-Fix-invalid-condition-check.patch * Fix incorrect check. posted upstream Add 0002-multipath-add-man-page-info-for-my-prkey-changes.patch * Add missing man page info. posted upstream Add 0003-multipath-there-is-no-none-path-state.patch * remove incorrect path state. posted upstream Add 0004-mutipath-updated-Huawei-storage-config.patch * update builtin device configuration. posted upstream Add 0005-multipath-fix-doc-typo.patch * fix man page typo. posted upstream Add 0006-multipath-add-ghost_delay-parameter.patch * add new multipath.conf parameter "ghost_delay". posted upstream
This commit is contained in:
parent
5e7fb0583a
commit
542c8d8bff
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,3 +6,4 @@ multipath-tools-091027.tar.gz
|
|||||||
/multipath-tools-f21166a.tgz
|
/multipath-tools-f21166a.tgz
|
||||||
/multipath.conf
|
/multipath.conf
|
||||||
/multipath-tools-git847cc43.tgz
|
/multipath-tools-git847cc43.tgz
|
||||||
|
/multipath-tools-0.7.3.tgz
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
||||||
Date: Mon, 26 Jun 2017 14:03:19 -0500
|
|
||||||
Subject: [PATCH] libmultipath: update 3PARdata builtin config
|
|
||||||
|
|
||||||
This updated config comes from hp.
|
|
||||||
|
|
||||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
||||||
---
|
|
||||||
libmultipath/hwtable.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
|
||||||
index 390d143..54bdcfc 100644
|
|
||||||
--- a/libmultipath/hwtable.c
|
|
||||||
+++ b/libmultipath/hwtable.c
|
|
||||||
@@ -49,6 +49,8 @@ static struct hwentry default_hw[] = {
|
|
||||||
.hwhandler = "1 alua",
|
|
||||||
.prio_name = PRIO_ALUA,
|
|
||||||
.no_path_retry = 18,
|
|
||||||
+ .fast_io_fail = 10,
|
|
||||||
+ .dev_loss = MAX_DEV_LOSS_TMO,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* RA8000 / ESA12000 */
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
35
0001-mpathpersist-Fix-invalid-condition-check.patch
Normal file
35
0001-mpathpersist-Fix-invalid-condition-check.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Wed, 6 Sep 2017 16:27:36 -0500
|
||||||
|
Subject: [PATCH] mpathpersist: Fix invalid condition check
|
||||||
|
|
||||||
|
In commit 1990257c (mpathpersist: add support for prkeys file), the
|
||||||
|
check to see if mpathpersist needed to tell multipathd to update a
|
||||||
|
device's prkey was wrong. It had a typo that made it evaluate to true
|
||||||
|
for any service action, instead of just for registrations. This is the
|
||||||
|
correct check.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmpathpersist/mpath_persist.c | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
|
||||||
|
index b5ed556..84ab293 100644
|
||||||
|
--- a/libmpathpersist/mpath_persist.c
|
||||||
|
+++ b/libmpathpersist/mpath_persist.c
|
||||||
|
@@ -339,8 +339,9 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
|
||||||
|
|
||||||
|
memcpy(&prkey, paramp->sa_key, 8);
|
||||||
|
if (mpp->prkey_source == PRKEY_SOURCE_FILE && prkey &&
|
||||||
|
- ((!get_be64(mpp->reservation_key) && MPATH_PROUT_REG_SA) ||
|
||||||
|
- MPATH_PROUT_REG_IGN_SA)) {
|
||||||
|
+ ((!get_be64(mpp->reservation_key) &&
|
||||||
|
+ rq_servact == MPATH_PROUT_REG_SA) ||
|
||||||
|
+ rq_servact == MPATH_PROUT_REG_IGN_SA)) {
|
||||||
|
memcpy(&mpp->reservation_key, paramp->sa_key, 8);
|
||||||
|
if (update_prkey(alias, get_be64(mpp->reservation_key))) {
|
||||||
|
condlog(0, "%s: failed to set prkey for multipathd.",
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
79
0002-multipath-add-man-page-info-for-my-prkey-changes.patch
Normal file
79
0002-multipath-add-man-page-info-for-my-prkey-changes.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Tue, 19 Sep 2017 16:29:18 -0500
|
||||||
|
Subject: [PATCH] multipath: add man page info for my prkey changes
|
||||||
|
|
||||||
|
Update the man pages to list the new configuration options and
|
||||||
|
multipathd commands.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
multipath/multipath.conf.5 | 17 +++++++++++++++++
|
||||||
|
multipathd/multipathd.8 | 16 ++++++++++++++++
|
||||||
|
2 files changed, 33 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||||
|
index 5b6dde7..92ad8b1 100644
|
||||||
|
--- a/multipath/multipath.conf.5
|
||||||
|
+++ b/multipath/multipath.conf.5
|
||||||
|
@@ -682,6 +682,17 @@ The default is: \fB/etc/multipath/wwids\fR
|
||||||
|
.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
+.B prkeys_file
|
||||||
|
+The full pathname of the prkeys file, which is used by multipathd to keep
|
||||||
|
+track of the persistent reservation key used for a specific WWID, when
|
||||||
|
+\fIreservation_key\fR is set to \fBfile\fR.
|
||||||
|
+.RS
|
||||||
|
+.TP
|
||||||
|
+The default is \fB/etc/multipath/prkeys\fR
|
||||||
|
+.RE
|
||||||
|
+.
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
.B log_checker_err
|
||||||
|
If set to
|
||||||
|
.I once
|
||||||
|
@@ -703,6 +714,12 @@ the same as the RESERVATION KEY field of the PERSISTENT RESERVE OUT parameter
|
||||||
|
list which contains an 8-byte value provided by the application client to the
|
||||||
|
device server to identify the I_T nexus.
|
||||||
|
.RS
|
||||||
|
+.PP
|
||||||
|
+Alternatively, this can be set to \fBfile\fR, which will store the RESERVATION
|
||||||
|
+KEY registered by mpathpersist in the \fIprkeys_file\fR. multipathd will then
|
||||||
|
+use this key to register additional paths as they appear. When the
|
||||||
|
+registration is removed, the RESERVATION KEY is removed from the
|
||||||
|
+\fIprkeys_file\fR.
|
||||||
|
.TP
|
||||||
|
The default is: \fB<unset>\fR
|
||||||
|
.RE
|
||||||
|
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
|
||||||
|
index 2615728..5c96680 100644
|
||||||
|
--- a/multipathd/multipathd.8
|
||||||
|
+++ b/multipathd/multipathd.8
|
||||||
|
@@ -247,6 +247,22 @@ Disable persistent reservation management on $map.
|
||||||
|
Get the current persistent reservation management status of $map.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
+.B map|multipath $map getprkey
|
||||||
|
+Get the current persistent reservation key associated with $map.
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
+.B map|multipath $map setprkey key $key
|
||||||
|
+Set the persistent reservation key associated with $map to $key in the
|
||||||
|
+\fIprkeys_file\fR. This key will only be used by multipathd if
|
||||||
|
+\fIreservation_key\fR is set to \fBfile\fR in \fI/etc/multipath.conf\fR.
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
+.B map|multipath $map unsetprkey
|
||||||
|
+Remove the persistent reservation key associated with $map from the
|
||||||
|
+\fIprkeys_file\fR. This will only unset the key used by multipathd if
|
||||||
|
+\fIreservation_key\fR is set to \fBfile\fR in \fI/etc/multipath.conf\fR.
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
.B quit|exit
|
||||||
|
End interactive session.
|
||||||
|
.
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
@ -1,107 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
||||||
Date: Wed, 12 Apr 2017 09:07:51 -0500
|
|
||||||
Subject: [PATCH] multipath: attempt at common multipath.rules
|
|
||||||
|
|
||||||
This is a proposal to try and bring the Redhat and SuSE multipath.rules
|
|
||||||
closer. There are a couple of changes that I'd like some input on.
|
|
||||||
|
|
||||||
The big change is moving the kpartx call into the multipath rules. Half
|
|
||||||
of the current kpartx.rules file is about creating symlinks for multiple
|
|
||||||
types of dm devices. The other half auto-creates kpartx devices on top
|
|
||||||
of multipath devices. Since it is only creating kpartx devices on top of
|
|
||||||
multipath devices, I've moved the these rules into multipath.rules, or
|
|
||||||
rather, I've replaced them with the redhat rules in multipath.rules. The
|
|
||||||
biggest difference is the kpartx isn't run on every reload. It works
|
|
||||||
with the 11-dm-mpath.rules code to not run kpartx on multipathd
|
|
||||||
generated reloads or when there aren't any working paths. It does
|
|
||||||
remember if it didn't get to run kpartx when it was supposed to (because
|
|
||||||
there were no valid paths or the device was suspended) and will make
|
|
||||||
sure to run it on the next possible uevent.
|
|
||||||
|
|
||||||
The other change is the redhat multipath rules remove the partition
|
|
||||||
device nodes for devices claimed by multipath. The udev rule will only
|
|
||||||
do this one time (both to keep from running partx on every event, and so
|
|
||||||
that if users manually reread the partition table, we don't keep
|
|
||||||
removing them when clearly they are wanted). Redhat does this because we
|
|
||||||
had multiple customer issues where they were using the scsi partitions
|
|
||||||
instead of the kpartx devices. Obviously, with setting the partition
|
|
||||||
devices to not ready and clearing their fs_type, this isn't essential,
|
|
||||||
but it has helped make customers do the right thing.
|
|
||||||
|
|
||||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
||||||
---
|
|
||||||
kpartx/kpartx.rules | 8 --------
|
|
||||||
multipath/multipath.rules | 27 ++++++++++++++++++++++++---
|
|
||||||
2 files changed, 24 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
|
|
||||||
index a958791..906e320 100644
|
|
||||||
--- a/kpartx/kpartx.rules
|
|
||||||
+++ b/kpartx/kpartx.rules
|
|
||||||
@@ -34,12 +34,4 @@ ENV{ID_FS_LABEL_ENC}=="?*", IMPORT{db}="ID_FS_LABEL_ENC"
|
|
||||||
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", \
|
|
||||||
SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
|
|
||||||
|
|
||||||
-# Create dm tables for partitions
|
|
||||||
-ENV{DM_ACTION}=="PATH_FAILED|PATH_REINSTATED", GOTO="kpartx_end"
|
|
||||||
-ENV{DM_NR_VALID_PATHS}=="0", GOTO="kpartx_end"
|
|
||||||
-ENV{ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
|
|
||||||
-ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="kpartx_end"
|
|
||||||
-ENV{DM_STATE}!="SUSPENDED", ENV{DM_UUID}=="mpath-*", \
|
|
||||||
- RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
|
||||||
-
|
|
||||||
LABEL="kpartx_end"
|
|
||||||
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
|
||||||
index 86defc0..616a04c 100644
|
|
||||||
--- a/multipath/multipath.rules
|
|
||||||
+++ b/multipath/multipath.rules
|
|
||||||
@@ -1,13 +1,13 @@
|
|
||||||
# Set DM_MULTIPATH_DEVICE_PATH if the device should be handled by multipath
|
|
||||||
SUBSYSTEM!="block", GOTO="end_mpath"
|
|
||||||
ACTION!="add|change", GOTO="end_mpath"
|
|
||||||
-KERNEL!="sd*|dasd*", GOTO="end_mpath"
|
|
||||||
-
|
|
||||||
+KERNEL!="sd*|dasd*|rbd*|dm-*", GOTO="end_mpath"
|
|
||||||
IMPORT{cmdline}="nompath"
|
|
||||||
ENV{nompath}=="?*", GOTO="end_mpath"
|
|
||||||
IMPORT{cmdline}="multipath"
|
|
||||||
ENV{multipath}=="off", GOTO="end_mpath"
|
|
||||||
|
|
||||||
+KERNEL=="dm-*", GOTO="check_kpartx"
|
|
||||||
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
|
||||||
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
|
|
||||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", ENV{ID_FS_TYPE}="none", \
|
|
||||||
@@ -21,7 +21,28 @@ TEST!="$env{MPATH_SBIN_PATH}/multipath", ENV{MPATH_SBIN_PATH}="/usr/sbin"
|
|
||||||
|
|
||||||
ENV{DM_MULTIPATH_DEVICE_PATH}!="1", \
|
|
||||||
PROGRAM=="$env{MPATH_SBIN_PATH}/multipath -u %k", \
|
|
||||||
- ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="none", \
|
|
||||||
+ ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="mpath_member", \
|
|
||||||
ENV{SYSTEMD_READY}="0"
|
|
||||||
|
|
||||||
+ENV{DM_MULTIPATH_DEVICE_PATH}!="1", GOTO="end_mpath"
|
|
||||||
+
|
|
||||||
+IMPORT{db}="DM_MULTIPATH_WIPE_PARTS"
|
|
||||||
+ENV{DM_MULTIPATH_WIPE_PARTS}!="1", ENV{DM_MULTIPATH_WIPE_PARTS}="1", \
|
|
||||||
+ RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
|
|
||||||
+GOTO="end_mpath"
|
|
||||||
+
|
|
||||||
+LABEL="check_kpartx"
|
|
||||||
+
|
|
||||||
+IMPORT{db}="DM_MULTIPATH_NEED_KPARTX"
|
|
||||||
+ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
|
|
||||||
+ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="end_mpath"
|
|
||||||
+ACTION!="change", GOTO="end_mpath"
|
|
||||||
+ENV{DM_UUID}!="mpath-?*", GOTO="end_mpath"
|
|
||||||
+ENV{DM_ACTIVATION}=="1", ENV{DM_MULTIPATH_NEED_KPARTX}="1"
|
|
||||||
+ENV{DM_SUSPENDED}=="1", GOTO="end_mpath"
|
|
||||||
+ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
|
|
||||||
+ENV{DM_ACTIVATION}!="1", ENV{DM_MULTIPATH_NEED_KPARTX}!="1", GOTO="end_mpath"
|
|
||||||
+RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
|
||||||
+ENV{DM_MULTIPATH_NEED_KPARTX}=""
|
|
||||||
+
|
|
||||||
LABEL="end_mpath"
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
@ -1,110 +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. Also, we don't
|
|
||||||
currently set up all the symlinks that SuSE does. If we want them, they
|
|
||||||
should be done in the device-mapper package, since they are for all
|
|
||||||
device-mapper devices. Redhat also uses a different naming scheme for
|
|
||||||
partitions than SuSE.
|
|
||||||
|
|
||||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
||||||
---
|
|
||||||
Makefile.inc | 2 +-
|
|
||||||
kpartx/Makefile | 14 +++++++-------
|
|
||||||
multipath/Makefile | 4 ++--
|
|
||||||
multipath/multipath.rules | 3 ++-
|
|
||||||
4 files changed, 12 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile.inc b/Makefile.inc
|
|
||||||
index 29c290a..cea015b 100644
|
|
||||||
--- a/Makefile.inc
|
|
||||||
+++ b/Makefile.inc
|
|
||||||
@@ -48,7 +48,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/Makefile b/kpartx/Makefile
|
|
||||||
index 7b75032..bfa6fe8 100644
|
|
||||||
--- a/kpartx/Makefile
|
|
||||||
+++ b/kpartx/Makefile
|
|
||||||
@@ -26,19 +26,19 @@ $(EXEC): $(OBJS)
|
|
||||||
install: $(EXEC) $(EXEC).8
|
|
||||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
|
|
||||||
$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)
|
|
||||||
- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)
|
|
||||||
- $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir)
|
|
||||||
- $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d
|
|
||||||
- $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
|
|
||||||
+# $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)
|
|
||||||
+# $(INSTALL_PROGRAM) -m 755 kpartx_id $(DESTDIR)$(libudevdir)
|
|
||||||
+# $(INSTALL_PROGRAM) -d $(DESTDIR)$(libudevdir)/rules.d
|
|
||||||
+# $(INSTALL_PROGRAM) -m 644 kpartx.rules $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
|
|
||||||
$(INSTALL_PROGRAM) -d $(DESTDIR)$(man8dir)
|
|
||||||
$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(man8dir)
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
$(RM) $(DESTDIR)$(bindir)/$(EXEC)
|
|
||||||
$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
|
|
||||||
- $(RM) $(DESTDIR)$(libudevdir)/kpartx_id
|
|
||||||
- $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
|
|
||||||
- $(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules
|
|
||||||
+# $(RM) $(DESTDIR)$(libudevdir)/kpartx_id
|
|
||||||
+# $(RM) $(DESTDIR)$(libudevdir)/rules.d/66-kpartx.rules
|
|
||||||
+# $(RM) $(DESTDIR)$(libudevdir)/rules.d/67-kpartx-compat.rules
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) core *.o $(EXEC) *.gz
|
|
||||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
|
||||||
index c85314e..1e9ee4b 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
|
|
||||||
|
|
||||||
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
|
||||||
index 616a04c..4d78b98 100644
|
|
||||||
--- a/multipath/multipath.rules
|
|
||||||
+++ b/multipath/multipath.rules
|
|
||||||
@@ -33,6 +33,7 @@ GOTO="end_mpath"
|
|
||||||
|
|
||||||
LABEL="check_kpartx"
|
|
||||||
|
|
||||||
+ENV{DM_UUID}=="mpath-?*|part[0-9]*-mpath-?*", OPTIONS+="link_priority=10"
|
|
||||||
IMPORT{db}="DM_MULTIPATH_NEED_KPARTX"
|
|
||||||
ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
|
|
||||||
ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="end_mpath"
|
|
||||||
@@ -42,7 +43,7 @@ ENV{DM_ACTIVATION}=="1", ENV{DM_MULTIPATH_NEED_KPARTX}="1"
|
|
||||||
ENV{DM_SUSPENDED}=="1", GOTO="end_mpath"
|
|
||||||
ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
|
|
||||||
ENV{DM_ACTIVATION}!="1", ENV{DM_MULTIPATH_NEED_KPARTX}!="1", GOTO="end_mpath"
|
|
||||||
-RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
|
||||||
+RUN+="/sbin/kpartx -un /dev/$name"
|
|
||||||
ENV{DM_MULTIPATH_NEED_KPARTX}=""
|
|
||||||
|
|
||||||
LABEL="end_mpath"
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
27
0003-multipath-there-is-no-none-path-state.patch
Normal file
27
0003-multipath-there-is-no-none-path-state.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Thu, 26 Oct 2017 17:00:20 -0500
|
||||||
|
Subject: [PATCH] multipath: there is no "none" path state
|
||||||
|
|
||||||
|
There is a "none" path checker, but not a "none" path state.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/checkers.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
|
||||||
|
index cd6d6a3..94d8486 100644
|
||||||
|
--- a/libmultipath/checkers.c
|
||||||
|
+++ b/libmultipath/checkers.c
|
||||||
|
@@ -19,7 +19,6 @@ char *checker_state_names[] = {
|
||||||
|
"timeout",
|
||||||
|
"removed",
|
||||||
|
"delayed",
|
||||||
|
- "none",
|
||||||
|
};
|
||||||
|
|
||||||
|
static LIST_HEAD(checkers);
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
30
0004-mutipath-updated-Huawei-storage-config.patch
Normal file
30
0004-mutipath-updated-Huawei-storage-config.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Wed, 1 Nov 2017 19:53:11 -0500
|
||||||
|
Subject: [PATCH] mutipath: updated Huawei storage config
|
||||||
|
|
||||||
|
I was given this updated built-in config by Zhou Weigang from
|
||||||
|
Huawei.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/hwtable.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||||
|
index b018ddf..78de1fa 100644
|
||||||
|
--- a/libmultipath/hwtable.c
|
||||||
|
+++ b/libmultipath/hwtable.c
|
||||||
|
@@ -940,7 +940,8 @@ static struct hwentry default_hw[] = {
|
||||||
|
/* OceanStor V3 */
|
||||||
|
.vendor = "HUAWEI",
|
||||||
|
.product = "XSG1",
|
||||||
|
- .pgpolicy = MULTIBUS,
|
||||||
|
+ .pgpolicy = GROUP_BY_PRIO,
|
||||||
|
+ .prio_name = PRIO_ALUA,
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
* Red Hat
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
29
0005-multipath-fix-doc-typo.patch
Normal file
29
0005-multipath-fix-doc-typo.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Wed, 1 Nov 2017 19:58:10 -0500
|
||||||
|
Subject: [PATCH] multipath: fix doc typo
|
||||||
|
|
||||||
|
The dev_loss_tmo cap if fast_io_fail_tmo isn't set is 600 seconds,
|
||||||
|
not 300 seconds.
|
||||||
|
|
||||||
|
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 92ad8b1..4bd1a8d 100644
|
||||||
|
--- a/multipath/multipath.conf.5
|
||||||
|
+++ b/multipath/multipath.conf.5
|
||||||
|
@@ -653,7 +653,7 @@ seconds, or 68 years. It will be automatically adjusted to the overall
|
||||||
|
retry interval \fIno_path_retry\fR * \fIpolling_interval\fR
|
||||||
|
if a number of retries is given with \fIno_path_retry\fR and the
|
||||||
|
overall retry interval is longer than the specified \fIdev_loss_tmo\fR value.
|
||||||
|
-The Linux kernel will cap this value to \fI300\fR if \fIfast_io_fail_tmo\fR
|
||||||
|
+The Linux kernel will cap this value to \fI600\fR if \fIfast_io_fail_tmo\fR
|
||||||
|
is not set. See KNOWN ISSUES.
|
||||||
|
.RS
|
||||||
|
.TP
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
397
0006-multipath-add-ghost_delay-parameter.patch
Normal file
397
0006-multipath-add-ghost_delay-parameter.patch
Normal file
@ -0,0 +1,397 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
Date: Thu, 2 Nov 2017 18:02:56 -0500
|
||||||
|
Subject: [PATCH] multipath: add "ghost_delay" parameter
|
||||||
|
|
||||||
|
If the lower-priority passive paths for a multipath device appear first,
|
||||||
|
IO can go to them and cause the hardware handler to activate them,
|
||||||
|
before the higher priority paths appear, causing the devices to
|
||||||
|
failback. Setting the "ghost_delay" parameter to a value greater than
|
||||||
|
0 can avoid this ping-ponging by causing udev to not mark the device as
|
||||||
|
Ready after its initial creation until either an active path appears,
|
||||||
|
or ghost_delay seconds have passed. Multipathd does this by setting
|
||||||
|
the MPATH_UDEV_NO_PATHS_FLAG.
|
||||||
|
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/config.c | 3 +++
|
||||||
|
libmultipath/config.h | 3 +++
|
||||||
|
libmultipath/configure.c | 11 +++++++++++
|
||||||
|
libmultipath/defaults.h | 1 +
|
||||||
|
libmultipath/devmapper.c | 2 +-
|
||||||
|
libmultipath/dict.c | 14 ++++++++++++++
|
||||||
|
libmultipath/hwtable.c | 1 +
|
||||||
|
libmultipath/propsel.c | 15 +++++++++++++++
|
||||||
|
libmultipath/propsel.h | 1 +
|
||||||
|
libmultipath/structs.h | 7 +++++++
|
||||||
|
multipath/multipath.conf.5 | 19 +++++++++++++++++++
|
||||||
|
multipathd/main.c | 28 +++++++++++++++++++++++++++-
|
||||||
|
12 files changed, 103 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||||
|
index ea2359a..9486116 100644
|
||||||
|
--- a/libmultipath/config.c
|
||||||
|
+++ b/libmultipath/config.c
|
||||||
|
@@ -351,6 +351,7 @@ merge_hwe (struct hwentry * dst, struct hwentry * src)
|
||||||
|
merge_num(delay_wait_checks);
|
||||||
|
merge_num(skip_kpartx);
|
||||||
|
merge_num(max_sectors_kb);
|
||||||
|
+ merge_num(ghost_delay);
|
||||||
|
merge_num(san_path_err_threshold);
|
||||||
|
merge_num(san_path_err_forget_rate);
|
||||||
|
merge_num(san_path_err_recovery_time);
|
||||||
|
@@ -422,6 +423,7 @@ store_hwe (vector hwtable, struct hwentry * dhwe)
|
||||||
|
hwe->retain_hwhandler = dhwe->retain_hwhandler;
|
||||||
|
hwe->detect_prio = dhwe->detect_prio;
|
||||||
|
hwe->detect_checker = dhwe->detect_checker;
|
||||||
|
+ hwe->ghost_delay = dhwe->ghost_delay;
|
||||||
|
|
||||||
|
if (dhwe->bl_product && !(hwe->bl_product = set_param_str(dhwe->bl_product)))
|
||||||
|
goto out;
|
||||||
|
@@ -622,6 +624,7 @@ load_config (char * file)
|
||||||
|
conf->uev_wait_timeout = DEFAULT_UEV_WAIT_TIMEOUT;
|
||||||
|
conf->disable_changed_wwids = DEFAULT_DISABLE_CHANGED_WWIDS;
|
||||||
|
conf->remove_retries = 0;
|
||||||
|
+ conf->ghost_delay = DEFAULT_GHOST_DELAY;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* preload default hwtable
|
||||||
|
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||||
|
index 240730b..67ff983 100644
|
||||||
|
--- a/libmultipath/config.h
|
||||||
|
+++ b/libmultipath/config.h
|
||||||
|
@@ -80,6 +80,7 @@ struct hwentry {
|
||||||
|
int san_path_err_recovery_time;
|
||||||
|
int skip_kpartx;
|
||||||
|
int max_sectors_kb;
|
||||||
|
+ int ghost_delay;
|
||||||
|
char * bl_product;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -112,6 +113,7 @@ struct mpentry {
|
||||||
|
int san_path_err_recovery_time;
|
||||||
|
int skip_kpartx;
|
||||||
|
int max_sectors_kb;
|
||||||
|
+ int ghost_delay;
|
||||||
|
uid_t uid;
|
||||||
|
gid_t gid;
|
||||||
|
mode_t mode;
|
||||||
|
@@ -170,6 +172,7 @@ struct config {
|
||||||
|
int disable_changed_wwids;
|
||||||
|
int remove_retries;
|
||||||
|
int max_sectors_kb;
|
||||||
|
+ int ghost_delay;
|
||||||
|
unsigned int version[3];
|
||||||
|
|
||||||
|
char * multipath_dir;
|
||||||
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||||
|
index 7a3db31..e2f393f 100644
|
||||||
|
--- a/libmultipath/configure.c
|
||||||
|
+++ b/libmultipath/configure.c
|
||||||
|
@@ -300,6 +300,7 @@ int setup_map(struct multipath *mpp, char *params, int params_size)
|
||||||
|
select_san_path_err_recovery_time(conf, mpp);
|
||||||
|
select_skip_kpartx(conf, mpp);
|
||||||
|
select_max_sectors_kb(conf, mpp);
|
||||||
|
+ select_ghost_delay(conf, mpp);
|
||||||
|
|
||||||
|
sysfs_set_scsi_tmo(mpp, conf->checkint);
|
||||||
|
put_multipath_config(conf);
|
||||||
|
@@ -760,6 +761,9 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||||
|
}
|
||||||
|
|
||||||
|
sysfs_set_max_sectors_kb(mpp, 0);
|
||||||
|
+ if (is_daemon && mpp->ghost_delay > 0 && mpp->nr_active &&
|
||||||
|
+ pathcount(mpp, PATH_GHOST) == mpp->nr_active)
|
||||||
|
+ mpp->ghost_delay_tick = mpp->ghost_delay;
|
||||||
|
r = dm_addmap_create(mpp, params);
|
||||||
|
|
||||||
|
lock_multipath(mpp, 0);
|
||||||
|
@@ -767,11 +771,15 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||||
|
|
||||||
|
case ACT_RELOAD:
|
||||||
|
sysfs_set_max_sectors_kb(mpp, 1);
|
||||||
|
+ if (mpp->ghost_delay_tick > 0 && pathcount(mpp, PATH_UP))
|
||||||
|
+ mpp->ghost_delay_tick = 0;
|
||||||
|
r = dm_addmap_reload(mpp, params, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ACT_RESIZE:
|
||||||
|
sysfs_set_max_sectors_kb(mpp, 1);
|
||||||
|
+ if (mpp->ghost_delay_tick > 0 && pathcount(mpp, PATH_UP))
|
||||||
|
+ mpp->ghost_delay_tick = 0;
|
||||||
|
r = dm_addmap_reload(mpp, params, 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -789,6 +797,9 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||||
|
put_multipath_config(conf);
|
||||||
|
if (r) {
|
||||||
|
sysfs_set_max_sectors_kb(mpp, 1);
|
||||||
|
+ if (mpp->ghost_delay_tick > 0 &&
|
||||||
|
+ pathcount(mpp, PATH_UP))
|
||||||
|
+ mpp->ghost_delay_tick = 0;
|
||||||
|
r = dm_addmap_reload(mpp, params, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
|
||||||
|
index 740ccf4..c9e3411 100644
|
||||||
|
--- a/libmultipath/defaults.h
|
||||||
|
+++ b/libmultipath/defaults.h
|
||||||
|
@@ -40,6 +40,7 @@
|
||||||
|
#define DEFAULT_SKIP_KPARTX SKIP_KPARTX_OFF
|
||||||
|
#define DEFAULT_DISABLE_CHANGED_WWIDS 0
|
||||||
|
#define DEFAULT_MAX_SECTORS_KB MAX_SECTORS_KB_UNDEF
|
||||||
|
+#define DEFAULT_GHOST_DELAY GHOST_DELAY_OFF
|
||||||
|
|
||||||
|
#define DEFAULT_CHECKINT 5
|
||||||
|
#define MAX_CHECKINT(a) (a << 2)
|
||||||
|
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||||
|
index fcac6bc..573fc75 100644
|
||||||
|
--- a/libmultipath/devmapper.c
|
||||||
|
+++ b/libmultipath/devmapper.c
|
||||||
|
@@ -378,7 +378,7 @@ static uint16_t build_udev_flags(const struct multipath *mpp, int reload)
|
||||||
|
/* DM_UDEV_DISABLE_LIBRARY_FALLBACK is added in dm_addmap */
|
||||||
|
return (mpp->skip_kpartx == SKIP_KPARTX_ON ?
|
||||||
|
MPATH_UDEV_NO_KPARTX_FLAG : 0) |
|
||||||
|
- (mpp->nr_active == 0 ?
|
||||||
|
+ ((mpp->nr_active == 0 || mpp->ghost_delay_tick > 0)?
|
||||||
|
MPATH_UDEV_NO_PATHS_FLAG : 0) |
|
||||||
|
(reload && !mpp->force_udev_reload ?
|
||||||
|
MPATH_UDEV_RELOAD_FLAG : 0);
|
||||||
|
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
||||||
|
index 36cccc9..54652d4 100644
|
||||||
|
--- a/libmultipath/dict.c
|
||||||
|
+++ b/libmultipath/dict.c
|
||||||
|
@@ -1110,6 +1110,16 @@ declare_hw_handler(san_path_err_recovery_time, set_off_int_undef)
|
||||||
|
declare_hw_snprint(san_path_err_recovery_time, print_off_int_undef)
|
||||||
|
declare_mp_handler(san_path_err_recovery_time, set_off_int_undef)
|
||||||
|
declare_mp_snprint(san_path_err_recovery_time, print_off_int_undef)
|
||||||
|
+
|
||||||
|
+declare_def_handler(ghost_delay, set_off_int_undef)
|
||||||
|
+declare_def_snprint(ghost_delay, print_off_int_undef)
|
||||||
|
+declare_ovr_handler(ghost_delay, set_off_int_undef)
|
||||||
|
+declare_ovr_snprint(ghost_delay, print_off_int_undef)
|
||||||
|
+declare_hw_handler(ghost_delay, set_off_int_undef)
|
||||||
|
+declare_hw_snprint(ghost_delay, print_off_int_undef)
|
||||||
|
+declare_mp_handler(ghost_delay, set_off_int_undef)
|
||||||
|
+declare_mp_snprint(ghost_delay, print_off_int_undef)
|
||||||
|
+
|
||||||
|
static int
|
||||||
|
def_uxsock_timeout_handler(struct config *conf, vector strvec)
|
||||||
|
{
|
||||||
|
@@ -1456,6 +1466,7 @@ init_keywords(vector keywords)
|
||||||
|
install_keyword("disable_changed_wwids", &def_disable_changed_wwids_handler, &snprint_def_disable_changed_wwids);
|
||||||
|
install_keyword("remove_retries", &def_remove_retries_handler, &snprint_def_remove_retries);
|
||||||
|
install_keyword("max_sectors_kb", &def_max_sectors_kb_handler, &snprint_def_max_sectors_kb);
|
||||||
|
+ install_keyword("ghost_delay", &def_ghost_delay_handler, &snprint_def_ghost_delay);
|
||||||
|
__deprecated install_keyword("default_selector", &def_selector_handler, NULL);
|
||||||
|
__deprecated install_keyword("default_path_grouping_policy", &def_pgpolicy_handler, NULL);
|
||||||
|
__deprecated install_keyword("default_uid_attribute", &def_uid_attribute_handler, NULL);
|
||||||
|
@@ -1535,6 +1546,7 @@ init_keywords(vector keywords)
|
||||||
|
install_keyword("san_path_err_recovery_time", &hw_san_path_err_recovery_time_handler, &snprint_hw_san_path_err_recovery_time);
|
||||||
|
install_keyword("skip_kpartx", &hw_skip_kpartx_handler, &snprint_hw_skip_kpartx);
|
||||||
|
install_keyword("max_sectors_kb", &hw_max_sectors_kb_handler, &snprint_hw_max_sectors_kb);
|
||||||
|
+ install_keyword("ghost_delay", &hw_ghost_delay_handler, &snprint_hw_ghost_delay);
|
||||||
|
install_sublevel_end();
|
||||||
|
|
||||||
|
install_keyword_root("overrides", &overrides_handler);
|
||||||
|
@@ -1569,6 +1581,7 @@ init_keywords(vector keywords)
|
||||||
|
|
||||||
|
install_keyword("skip_kpartx", &ovr_skip_kpartx_handler, &snprint_ovr_skip_kpartx);
|
||||||
|
install_keyword("max_sectors_kb", &ovr_max_sectors_kb_handler, &snprint_ovr_max_sectors_kb);
|
||||||
|
+ install_keyword("ghost_delay", &ovr_ghost_delay_handler, &snprint_ovr_ghost_delay);
|
||||||
|
|
||||||
|
install_keyword_root("multipaths", &multipaths_handler);
|
||||||
|
install_keyword_multi("multipath", &multipath_handler, NULL);
|
||||||
|
@@ -1600,5 +1613,6 @@ init_keywords(vector keywords)
|
||||||
|
install_keyword("san_path_err_recovery_time", &mp_san_path_err_recovery_time_handler, &snprint_mp_san_path_err_recovery_time);
|
||||||
|
install_keyword("skip_kpartx", &mp_skip_kpartx_handler, &snprint_mp_skip_kpartx);
|
||||||
|
install_keyword("max_sectors_kb", &mp_max_sectors_kb_handler, &snprint_mp_max_sectors_kb);
|
||||||
|
+ install_keyword("ghost_delay", &mp_ghost_delay_handler, &snprint_mp_ghost_delay);
|
||||||
|
install_sublevel_end();
|
||||||
|
}
|
||||||
|
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||||
|
index 78de1fa..7226fb1 100644
|
||||||
|
--- a/libmultipath/hwtable.c
|
||||||
|
+++ b/libmultipath/hwtable.c
|
||||||
|
@@ -72,6 +72,7 @@
|
||||||
|
.delay_wait_checks = DELAY_CHECKS_OFF,
|
||||||
|
.skip_kpartx = SKIP_KPARTX_OFF,
|
||||||
|
.max_sectors_kb = MAX_SECTORS_KB_UNDEF,
|
||||||
|
+ .ghost_delay = GHOST_DELAY_OFF
|
||||||
|
},
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
|
||||||
|
index 00adc0d..6721cc6 100644
|
||||||
|
--- a/libmultipath/propsel.c
|
||||||
|
+++ b/libmultipath/propsel.c
|
||||||
|
@@ -835,3 +835,18 @@ out:
|
||||||
|
origin);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+int select_ghost_delay (struct config *conf, struct multipath * mp)
|
||||||
|
+{
|
||||||
|
+ char *origin, buff[12];
|
||||||
|
+
|
||||||
|
+ mp_set_mpe(ghost_delay);
|
||||||
|
+ mp_set_ovr(ghost_delay);
|
||||||
|
+ mp_set_hwe(ghost_delay);
|
||||||
|
+ mp_set_conf(ghost_delay);
|
||||||
|
+ mp_set_default(ghost_delay, DEFAULT_GHOST_DELAY);
|
||||||
|
+out:
|
||||||
|
+ print_off_int_undef(buff, 12, &mp->ghost_delay);
|
||||||
|
+ condlog(3, "%s: ghost_delay = %s %s", mp->alias, buff, origin);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
diff --git a/libmultipath/propsel.h b/libmultipath/propsel.h
|
||||||
|
index f8e96d8..494fb10 100644
|
||||||
|
--- a/libmultipath/propsel.h
|
||||||
|
+++ b/libmultipath/propsel.h
|
||||||
|
@@ -25,6 +25,7 @@ int select_delay_watch_checks (struct config *conf, struct multipath * mp);
|
||||||
|
int select_delay_wait_checks (struct config *conf, struct multipath * mp);
|
||||||
|
int select_skip_kpartx (struct config *conf, struct multipath * mp);
|
||||||
|
int select_max_sectors_kb (struct config *conf, struct multipath * mp);
|
||||||
|
+int select_ghost_delay(struct config *conf, struct multipath * mp);
|
||||||
|
int select_san_path_err_forget_rate(struct config *conf, struct multipath *mp);
|
||||||
|
int select_san_path_err_threshold(struct config *conf, struct multipath *mp);
|
||||||
|
int select_san_path_err_recovery_time(struct config *conf, struct multipath *mp);
|
||||||
|
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
|
||||||
|
index f06824a..d2d7701 100644
|
||||||
|
--- a/libmultipath/structs.h
|
||||||
|
+++ b/libmultipath/structs.h
|
||||||
|
@@ -167,6 +167,11 @@ enum no_undef_states {
|
||||||
|
NU_UNDEF = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
+enum ghost_delay_states {
|
||||||
|
+ GHOST_DELAY_OFF = NU_NO,
|
||||||
|
+ GHOST_DELAY_UNDEF = NU_UNDEF,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
enum initialized_states {
|
||||||
|
INIT_FAILED,
|
||||||
|
INIT_MISSING_UDEV,
|
||||||
|
@@ -282,6 +287,8 @@ struct multipath {
|
||||||
|
int max_sectors_kb;
|
||||||
|
int force_readonly;
|
||||||
|
int force_udev_reload;
|
||||||
|
+ int ghost_delay;
|
||||||
|
+ int ghost_delay_tick;
|
||||||
|
unsigned int dev_loss;
|
||||||
|
uid_t uid;
|
||||||
|
gid_t gid;
|
||||||
|
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||||
|
index 4bd1a8d..8783124 100644
|
||||||
|
--- a/multipath/multipath.conf.5
|
||||||
|
+++ b/multipath/multipath.conf.5
|
||||||
|
@@ -1017,6 +1017,19 @@ The default is: \fB<device dependent>\fR
|
||||||
|
.RE
|
||||||
|
.
|
||||||
|
.
|
||||||
|
+.TP
|
||||||
|
+.B ghost_delay
|
||||||
|
+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
|
||||||
|
+makes multipath immediately mark a device with only ghost paths as ready.
|
||||||
|
+.RS
|
||||||
|
+.TP
|
||||||
|
+The default is \fBno\fR
|
||||||
|
+.RE
|
||||||
|
+.
|
||||||
|
+.
|
||||||
|
.\" ----------------------------------------------------------------------------
|
||||||
|
.SH "blacklist section"
|
||||||
|
.\" ----------------------------------------------------------------------------
|
||||||
|
@@ -1157,6 +1170,8 @@ are taken from the \fIdefaults\fR or \fIdevices\fR section:
|
||||||
|
.B skip_kpartx
|
||||||
|
.TP
|
||||||
|
.B max_sectors_kb
|
||||||
|
+.TP
|
||||||
|
+.B ghost_delay
|
||||||
|
.RE
|
||||||
|
.PD
|
||||||
|
.LP
|
||||||
|
@@ -1284,6 +1299,8 @@ section:
|
||||||
|
.B skip_kpartx
|
||||||
|
.TP
|
||||||
|
.B max_sectors_kb
|
||||||
|
+.TP
|
||||||
|
+.B ghost_delay
|
||||||
|
.RE
|
||||||
|
.PD
|
||||||
|
.LP
|
||||||
|
@@ -1354,6 +1371,8 @@ the values are taken from the \fIdevices\fR or \fIdefaults\fR sections:
|
||||||
|
.B delay_wait_checks
|
||||||
|
.TP
|
||||||
|
.B skip_kpartx
|
||||||
|
+.TP
|
||||||
|
+.B ghost_delay
|
||||||
|
.RE
|
||||||
|
.PD
|
||||||
|
.LP
|
||||||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||||
|
index 8049da2..c475fcd 100644
|
||||||
|
--- a/multipathd/main.c
|
||||||
|
+++ b/multipathd/main.c
|
||||||
|
@@ -351,6 +351,8 @@ sync_map_state(struct multipath *mpp)
|
||||||
|
pp->state == PATH_WILD ||
|
||||||
|
pp->state == PATH_DELAYED)
|
||||||
|
continue;
|
||||||
|
+ if (mpp->ghost_delay_tick > 0)
|
||||||
|
+ continue;
|
||||||
|
if ((pp->dmstate == PSTATE_FAILED ||
|
||||||
|
pp->dmstate == PSTATE_UNDEF) &&
|
||||||
|
(pp->state == PATH_UP || pp->state == PATH_GHOST))
|
||||||
|
@@ -735,7 +737,8 @@ ev_add_path (struct path * pp, struct vectors * vecs, int need_do_map)
|
||||||
|
mpp = find_mp_by_wwid(vecs->mpvec, pp->wwid);
|
||||||
|
if (mpp && mpp->wait_for_udev &&
|
||||||
|
(pathcount(mpp, PATH_UP) > 0 ||
|
||||||
|
- (pathcount(mpp, PATH_GHOST) > 0 && pp->tpgs != TPGS_IMPLICIT))) {
|
||||||
|
+ (pathcount(mpp, PATH_GHOST) > 0 && pp->tpgs != TPGS_IMPLICIT &&
|
||||||
|
+ mpp->ghost_delay_tick <= 0))) {
|
||||||
|
/* if wait_for_udev is set and valid paths exist */
|
||||||
|
condlog(2, "%s: delaying path addition until %s is fully initialized", pp->dev, mpp->alias);
|
||||||
|
mpp->wait_for_udev = 2;
|
||||||
|
@@ -1416,6 +1419,28 @@ missing_uev_wait_tick(struct vectors *vecs)
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
+ghost_delay_tick(struct vectors *vecs)
|
||||||
|
+{
|
||||||
|
+ struct multipath * mpp;
|
||||||
|
+ unsigned int i;
|
||||||
|
+
|
||||||
|
+ vector_foreach_slot (vecs->mpvec, mpp, i) {
|
||||||
|
+ if (mpp->ghost_delay_tick <= 0)
|
||||||
|
+ continue;
|
||||||
|
+ if (--mpp->ghost_delay_tick <= 0) {
|
||||||
|
+ condlog(0, "%s: timed out waiting for active path",
|
||||||
|
+ mpp->alias);
|
||||||
|
+ mpp->force_udev_reload = 1;
|
||||||
|
+ if (update_map(mpp, vecs) != 0) {
|
||||||
|
+ /* update_map removed map */
|
||||||
|
+ i--;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
defered_failback_tick (vector mpvec)
|
||||||
|
{
|
||||||
|
struct multipath * mpp;
|
||||||
|
@@ -1961,6 +1986,7 @@ checkerloop (void *ap)
|
||||||
|
defered_failback_tick(vecs->mpvec);
|
||||||
|
retry_count_tick(vecs->mpvec);
|
||||||
|
missing_uev_wait_tick(vecs);
|
||||||
|
+ ghost_delay_tick(vecs);
|
||||||
|
lock_cleanup_pop(vecs->lock);
|
||||||
|
|
||||||
|
if (count)
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
66
0007-RH-fixup-udev-rules-for-redhat.patch
Normal file
66
0007-RH-fixup-udev-rules-for-redhat.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
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 29c290a..cea015b 100644
|
||||||
|
--- a/Makefile.inc
|
||||||
|
+++ b/Makefile.inc
|
||||||
|
@@ -48,7 +48,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 8f99049..8a3a171 100644
|
||||||
|
--- a/kpartx/kpartx.rules
|
||||||
|
+++ b/kpartx/kpartx.rules
|
||||||
|
@@ -32,6 +32,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 468c056..dda5565 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
|
||||||
|
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
@ -51,10 +51,10 @@ index ee396e2..19d4697 100644
|
|||||||
|
|
||||||
void
|
void
|
||||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||||
index 0049cba..35fc0b1 100644
|
index 8783124..fa4333d 100644
|
||||||
--- a/multipath/multipath.conf.5
|
--- a/multipath/multipath.conf.5
|
||||||
+++ b/multipath/multipath.conf.5
|
+++ b/multipath/multipath.conf.5
|
||||||
@@ -1034,10 +1034,6 @@ The \fIWorld Wide Identification\fR of a device.
|
@@ -1085,10 +1085,6 @@ The \fIWorld Wide Identification\fR of a device.
|
||||||
.TP
|
.TP
|
||||||
.B property
|
.B property
|
||||||
Regular expression of the udev property to be whitelisted.
|
Regular expression of the udev property to be whitelisted.
|
@ -20,18 +20,18 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||||||
5 files changed, 22 insertions(+)
|
5 files changed, 22 insertions(+)
|
||||||
|
|
||||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||||
index 6b23601..9368962 100644
|
index 9486116..85e32ee 100644
|
||||||
--- a/libmultipath/config.c
|
--- a/libmultipath/config.c
|
||||||
+++ b/libmultipath/config.c
|
+++ b/libmultipath/config.c
|
||||||
@@ -25,6 +25,7 @@
|
@@ -26,6 +26,7 @@
|
||||||
#include "prio.h"
|
|
||||||
#include "devmapper.h"
|
#include "devmapper.h"
|
||||||
#include "mpath_cmd.h"
|
#include "mpath_cmd.h"
|
||||||
|
#include "propsel.h"
|
||||||
+#include "version.h"
|
+#include "version.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
|
hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
|
||||||
@@ -674,6 +675,22 @@ load_config (char * file)
|
@@ -659,6 +660,22 @@ load_config (char * file)
|
||||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size);
|
factorize_hwtable(conf->hwtable, builtin_hwtable_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,10 +55,10 @@ index 6b23601..9368962 100644
|
|||||||
|
|
||||||
conf->processed_main_config = 1;
|
conf->processed_main_config = 1;
|
||||||
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||||
index ffc69b5..614331c 100644
|
index 67ff983..1dbb9a7 100644
|
||||||
--- a/libmultipath/config.h
|
--- a/libmultipath/config.h
|
||||||
+++ b/libmultipath/config.h
|
+++ b/libmultipath/config.h
|
||||||
@@ -7,6 +7,7 @@
|
@@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#define ORIGIN_DEFAULT 0
|
#define ORIGIN_DEFAULT 0
|
||||||
#define ORIGIN_CONFIG 1
|
#define ORIGIN_CONFIG 1
|
||||||
@ -67,19 +67,19 @@ index ffc69b5..614331c 100644
|
|||||||
/*
|
/*
|
||||||
* In kernel, fast_io_fail == 0 means immediate failure on rport delete.
|
* In kernel, fast_io_fail == 0 means immediate failure on rport delete.
|
||||||
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
||||||
index 4d78b98..5753766 100644
|
index bc1a852..2bc0348 100644
|
||||||
--- a/multipath/multipath.rules
|
--- a/multipath/multipath.rules
|
||||||
+++ b/multipath/multipath.rules
|
+++ b/multipath/multipath.rules
|
||||||
@@ -6,6 +6,7 @@ IMPORT{cmdline}="nompath"
|
@@ -7,6 +7,7 @@ IMPORT{cmdline}="nompath"
|
||||||
ENV{nompath}=="?*", GOTO="end_mpath"
|
ENV{nompath}=="?*", GOTO="end_mpath"
|
||||||
IMPORT{cmdline}="multipath"
|
IMPORT{cmdline}="multipath"
|
||||||
ENV{multipath}=="off", GOTO="end_mpath"
|
ENV{multipath}=="off", GOTO="end_mpath"
|
||||||
+TEST!="/etc/multipath.conf", GOTO="end_mpath"
|
+TEST!="/etc/multipath.conf", GOTO="end_mpath"
|
||||||
|
|
||||||
KERNEL=="dm-*", GOTO="check_kpartx"
|
|
||||||
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
||||||
|
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
|
||||||
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
|
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
|
||||||
index 2615728..d64040f 100644
|
index 5c96680..0515211 100644
|
||||||
--- a/multipathd/multipathd.8
|
--- a/multipathd/multipathd.8
|
||||||
+++ b/multipathd/multipathd.8
|
+++ b/multipathd/multipathd.8
|
||||||
@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy.
|
@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy.
|
@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||||||
create mode 100644 multipath/mpathconf.8
|
create mode 100644 multipath/mpathconf.8
|
||||||
|
|
||||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||||
index 9368962..bdde113 100644
|
index 85e32ee..f1a6ca8 100644
|
||||||
--- a/libmultipath/config.c
|
--- a/libmultipath/config.c
|
||||||
+++ b/libmultipath/config.c
|
+++ b/libmultipath/config.c
|
||||||
@@ -679,6 +679,7 @@ load_config (char * file)
|
@@ -664,6 +664,7 @@ load_config (char * file)
|
||||||
condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
||||||
condlog(0, "A default multipath.conf file is located at");
|
condlog(0, "A default multipath.conf file is located at");
|
||||||
condlog(0, "/usr/share/doc/device-mapper-multipath-%d.%d.%d/multipath.conf", MULTIPATH_VERSION(VERSION_CODE));
|
condlog(0, "/usr/share/doc/device-mapper-multipath-%d.%d.%d/multipath.conf", MULTIPATH_VERSION(VERSION_CODE));
|
||||||
@ -33,7 +33,7 @@ index 9368962..bdde113 100644
|
|||||||
conf->blist_devnode = vector_alloc();
|
conf->blist_devnode = vector_alloc();
|
||||||
if (!conf->blist_devnode) {
|
if (!conf->blist_devnode) {
|
||||||
diff --git a/multipath/Makefile b/multipath/Makefile
|
diff --git a/multipath/Makefile b/multipath/Makefile
|
||||||
index 1e9ee4b..3d4d459 100644
|
index dda5565..d35127a 100644
|
||||||
--- a/multipath/Makefile
|
--- a/multipath/Makefile
|
||||||
+++ b/multipath/Makefile
|
+++ b/multipath/Makefile
|
||||||
@@ -18,10 +18,12 @@ $(EXEC): $(OBJS)
|
@@ -18,10 +18,12 @@ $(EXEC): $(OBJS)
|
@ -85,7 +85,7 @@ index 9527012..b665232 100644
|
|||||||
|
|
||||||
#endif /* _WWIDS_H */
|
#endif /* _WWIDS_H */
|
||||||
diff --git a/multipath/main.c b/multipath/main.c
|
diff --git a/multipath/main.c b/multipath/main.c
|
||||||
index dede017..9dda21d 100644
|
index bffe065..2e69300 100644
|
||||||
--- a/multipath/main.c
|
--- a/multipath/main.c
|
||||||
+++ b/multipath/main.c
|
+++ b/multipath/main.c
|
||||||
@@ -102,7 +102,7 @@ usage (char * progname)
|
@@ -102,7 +102,7 @@ usage (char * progname)
|
||||||
@ -104,18 +104,18 @@ index dede017..9dda21d 100644
|
|||||||
+ " -A add devices from kernel command line mpath.wwids\n"
|
+ " -A add devices from kernel command line mpath.wwids\n"
|
||||||
+ " parameters to wwids file\n"
|
+ " parameters to wwids file\n"
|
||||||
" -c check if a device should be a path in a multipath device\n"
|
" -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"
|
" -q allow queue_if_no_path when multipathd is not running\n"
|
||||||
" -d dry run, do not create or update devmaps\n"
|
@@ -598,7 +600,7 @@ main (int argc, char *argv[])
|
||||||
@@ -522,7 +524,7 @@ main (int argc, char *argv[])
|
|
||||||
exit(1);
|
exit(1);
|
||||||
multipath_conf = conf;
|
multipath_conf = conf;
|
||||||
conf->retrigger_tries = 0;
|
conf->retrigger_tries = 0;
|
||||||
- while ((arg = getopt(argc, argv, ":adchl::FfM:v:p:b:BrR:itquwW")) != EOF ) {
|
- while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
|
||||||
+ while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BrR:itquwW")) != EOF ) {
|
+ while ((arg = getopt(argc, argv, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
|
||||||
switch(arg) {
|
switch(arg) {
|
||||||
case 1: printf("optarg : %s\n",optarg);
|
case 1: printf("optarg : %s\n",optarg);
|
||||||
break;
|
break;
|
||||||
@@ -586,6 +588,10 @@ main (int argc, char *argv[])
|
@@ -665,6 +667,10 @@ main (int argc, char *argv[])
|
||||||
case 't':
|
case 't':
|
||||||
r = dump_config(conf);
|
r = dump_config(conf);
|
||||||
goto out_free_config;
|
goto out_free_config;
|
||||||
@ -127,19 +127,19 @@ index dede017..9dda21d 100644
|
|||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(0);
|
exit(0);
|
||||||
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
||||||
index b9436e5..b9ad6b1 100644
|
index 56f8703..9fc2317 100644
|
||||||
--- a/multipath/multipath.8
|
--- a/multipath/multipath.8
|
||||||
+++ b/multipath/multipath.8
|
+++ b/multipath/multipath.8
|
||||||
@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
|
@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
|
||||||
.RB [\| \-b\ \c
|
.RB [\| \-b\ \c
|
||||||
.IR bindings_file \|]
|
.IR bindings_file \|]
|
||||||
.RB [\| \-d \|]
|
.RB [\| \-d \|]
|
||||||
-.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \|-i | \-a | \|-u | \-w | \-W \|]
|
-.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|]
|
||||||
+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \|-i | \-a | \-A | \-u | \-w | \-W \|]
|
+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|]
|
||||||
.RB [\| \-p\ \c
|
.RB [\| \-p\ \c
|
||||||
.IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
|
.IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
|
||||||
.RB [\| \-R\ \c
|
.RB [\| \-R\ \c
|
||||||
@@ -122,6 +122,9 @@ Add the WWID for the specified device to the WWIDs file.
|
@@ -128,6 +128,9 @@ Add the WWID for the specified device to the WWIDs file.
|
||||||
Check if the device specified in the program environment should be
|
Check if the device specified in the program environment should be
|
||||||
a path in a multipath device.
|
a path in a multipath device.
|
||||||
.
|
.
|
||||||
@ -147,8 +147,8 @@ index b9436e5..b9ad6b1 100644
|
|||||||
+add wwids from any kernel command line mpath.wwid parameters to the wwids file
|
+add wwids from any kernel command line mpath.wwid parameters to the wwids file
|
||||||
+.
|
+.
|
||||||
.TP
|
.TP
|
||||||
.B \-w
|
.B \-U
|
||||||
Remove the WWID for the specified device from the WWIDs file.
|
Check if the device specified in the program environment is a multipath device
|
||||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||||
index fafd088..a623a3f 100644
|
index fafd088..a623a3f 100644
|
||||||
--- a/multipathd/multipathd.service
|
--- a/multipathd/multipathd.service
|
@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||||||
5 files changed, 30 insertions(+), 10 deletions(-)
|
5 files changed, 30 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||||
index bd090d9..843dd09 100644
|
index e2f393f..64d7751 100644
|
||||||
--- a/libmultipath/configure.c
|
--- a/libmultipath/configure.c
|
||||||
+++ b/libmultipath/configure.c
|
+++ b/libmultipath/configure.c
|
||||||
@@ -422,6 +422,28 @@ trigger_udev_change(const struct multipath *mpp)
|
@@ -423,6 +423,28 @@ trigger_udev_change(const struct multipath *mpp)
|
||||||
udev_device_unref(udd);
|
udev_device_unref(udd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ index bd090d9..843dd09 100644
|
|||||||
static int
|
static int
|
||||||
is_mpp_known_to_udev(const struct multipath *mpp)
|
is_mpp_known_to_udev(const struct multipath *mpp)
|
||||||
{
|
{
|
||||||
@@ -802,8 +824,8 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
@@ -814,8 +836,8 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||||
* succeeded
|
* succeeded
|
||||||
*/
|
*/
|
||||||
mpp->force_udev_reload = 0;
|
mpp->force_udev_reload = 0;
|
||||||
@ -65,13 +65,13 @@ index bd090d9..843dd09 100644
|
|||||||
/* multipath client mode */
|
/* multipath client mode */
|
||||||
dm_switchgroup(mpp->alias, mpp->bestpg);
|
dm_switchgroup(mpp->alias, mpp->bestpg);
|
||||||
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
|
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
|
||||||
index fd7f581..253e29b 100644
|
index 0ffc28e..09603ba 100644
|
||||||
--- a/libmultipath/configure.h
|
--- a/libmultipath/configure.h
|
||||||
+++ b/libmultipath/configure.h
|
+++ b/libmultipath/configure.h
|
||||||
@@ -36,3 +36,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
|
@@ -37,3 +37,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
|
||||||
vector pathvec, char **wwid);
|
|
||||||
int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh, int is_daemon);
|
int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh, int is_daemon);
|
||||||
int sysfs_get_host_adapter_name(struct path *pp, char *adapter_name);
|
int sysfs_get_host_adapter_name(struct path *pp, char *adapter_name);
|
||||||
|
struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
||||||
+void trigger_paths_udev_change(const struct multipath *mpp);
|
+void trigger_paths_udev_change(const struct multipath *mpp);
|
||||||
diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
|
diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
|
||||||
index 88bb72b..249c6c1 100644
|
index 88bb72b..249c6c1 100644
|
||||||
@ -96,10 +96,10 @@ index 88bb72b..249c6c1 100644
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
diff --git a/multipath/main.c b/multipath/main.c
|
diff --git a/multipath/main.c b/multipath/main.c
|
||||||
index 9dda21d..baae256 100644
|
index 2e69300..4dde5af 100644
|
||||||
--- a/multipath/main.c
|
--- a/multipath/main.c
|
||||||
+++ b/multipath/main.c
|
+++ b/multipath/main.c
|
||||||
@@ -336,7 +336,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
@@ -412,7 +412,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
||||||
}
|
}
|
||||||
if (cmd == CMD_ADD_WWID) {
|
if (cmd == CMD_ADD_WWID) {
|
||||||
r = remember_wwid(refwwid);
|
r = remember_wwid(refwwid);
|
||||||
@ -109,10 +109,10 @@ index 9dda21d..baae256 100644
|
|||||||
else
|
else
|
||||||
printf("failed adding '%s' to wwids file\n",
|
printf("failed adding '%s' to wwids file\n",
|
||||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||||
index 4be2c57..fc5b18a 100644
|
index c475fcd..50749a8 100644
|
||||||
--- a/multipathd/main.c
|
--- a/multipathd/main.c
|
||||||
+++ b/multipathd/main.c
|
+++ b/multipathd/main.c
|
||||||
@@ -2093,7 +2093,8 @@ configure (struct vectors * vecs, int start_waiters)
|
@@ -2138,7 +2138,8 @@ configure (struct vectors * vecs, int start_waiters)
|
||||||
|
|
||||||
sync_maps_state(mpvec);
|
sync_maps_state(mpvec);
|
||||||
vector_foreach_slot(mpvec, mpp, i){
|
vector_foreach_slot(mpvec, mpp, i){
|
||||||
@ -122,7 +122,7 @@ index 4be2c57..fc5b18a 100644
|
|||||||
update_map_pr(mpp);
|
update_map_pr(mpp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2175,10 +2176,6 @@ reconfigure (struct vectors * vecs)
|
@@ -2220,10 +2221,6 @@ reconfigure (struct vectors * vecs)
|
||||||
conf->verbosity = verbosity;
|
conf->verbosity = verbosity;
|
||||||
if (bindings_read_only)
|
if (bindings_read_only)
|
||||||
conf->bindings_read_only = bindings_read_only;
|
conf->bindings_read_only = bindings_read_only;
|
@ -16,10 +16,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|||||||
3 files changed, 35 insertions(+), 6 deletions(-)
|
3 files changed, 35 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
||||||
index 82066f6..c68d6f1 100644
|
index 54652d4..8d97602 100644
|
||||||
--- a/libmultipath/dict.c
|
--- a/libmultipath/dict.c
|
||||||
+++ b/libmultipath/dict.c
|
+++ b/libmultipath/dict.c
|
||||||
@@ -51,6 +51,21 @@ set_str(vector strvec, void *ptr)
|
@@ -52,6 +52,21 @@ set_str(vector strvec, void *ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -41,7 +41,7 @@ index 82066f6..c68d6f1 100644
|
|||||||
set_yes_no(vector strvec, void *ptr)
|
set_yes_no(vector strvec, void *ptr)
|
||||||
{
|
{
|
||||||
char * buff;
|
char * buff;
|
||||||
@@ -1175,7 +1190,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \
|
@@ -1190,7 +1205,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \
|
||||||
if (!conf->option) \
|
if (!conf->option) \
|
||||||
return 1; \
|
return 1; \
|
||||||
\
|
\
|
||||||
@ -50,7 +50,7 @@ index 82066f6..c68d6f1 100644
|
|||||||
if (!buff) \
|
if (!buff) \
|
||||||
return 1; \
|
return 1; \
|
||||||
\
|
\
|
||||||
@@ -1191,7 +1206,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
|
@@ -1206,7 +1221,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
|
||||||
if (!conf->option) \
|
if (!conf->option) \
|
||||||
return 1; \
|
return 1; \
|
||||||
\
|
\
|
||||||
@ -59,7 +59,7 @@ index 82066f6..c68d6f1 100644
|
|||||||
if (!buff) \
|
if (!buff) \
|
||||||
return 1; \
|
return 1; \
|
||||||
\
|
\
|
||||||
@@ -1286,16 +1301,16 @@ device_handler(struct config *conf, vector strvec)
|
@@ -1301,16 +1316,16 @@ device_handler(struct config *conf, vector strvec)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1,26 +1,30 @@
|
|||||||
Summary: Tools to manage multipath devices using device-mapper
|
Summary: Tools to manage multipath devices using device-mapper
|
||||||
Name: device-mapper-multipath
|
Name: device-mapper-multipath
|
||||||
Version: 0.7.1
|
Version: 0.7.3
|
||||||
Release: 8.git847cc43%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPL+
|
License: GPL+
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
URL: http://christophe.varoqui.free.fr/
|
URL: http://christophe.varoqui.free.fr/
|
||||||
|
|
||||||
# The source for this package was pulled from upstream's git repo. Use the
|
# The source for this package was pulled from upstream's git repo. Use the
|
||||||
# following command to generate the tarball
|
# following command to generate the tarball
|
||||||
# curl "https://git.opensvc.com/?p=multipath-tools/.git;a=snapshot;h=847cc43;sf=tgz" -o multipath-tools-git847cc43.tgz
|
# curl "https://git.opensvc.com/?p=multipath-tools/.git;a=snapshot;h=refs/tags/0.7.3;sf=tgz" -o multipath-tools-0.7.3.tgz
|
||||||
Source0: multipath-tools-git847cc43.tgz
|
Source0: multipath-tools-0.7.3.tgz
|
||||||
Source1: multipath.conf
|
Source1: multipath.conf
|
||||||
Patch0001: 0001-libmultipath-update-3PARdata-builtin-config.patch
|
Patch0001: 0001-mpathpersist-Fix-invalid-condition-check.patch
|
||||||
Patch0002: 0002-multipath-attempt-at-common-multipath.rules.patch
|
Patch0002: 0002-multipath-add-man-page-info-for-my-prkey-changes.patch
|
||||||
Patch0003: 0003-RH-fixup-udev-rules-for-redhat.patch
|
Patch0003: 0003-multipath-there-is-no-none-path-state.patch
|
||||||
Patch0004: 0004-RH-Remove-the-property-blacklist-exception-builtin.patch
|
Patch0004: 0004-mutipath-updated-Huawei-storage-config.patch
|
||||||
Patch0005: 0005-RH-don-t-start-without-a-config-file.patch
|
Patch0005: 0005-multipath-fix-doc-typo.patch
|
||||||
Patch0006: 0006-RH-use-rpm-optflags-if-present.patch
|
Patch0006: 0006-multipath-add-ghost_delay-parameter.patch
|
||||||
Patch0007: 0007-RH-add-mpathconf.patch
|
Patch0007: 0007-RH-fixup-udev-rules-for-redhat.patch
|
||||||
Patch0008: 0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
Patch0008: 0008-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||||
Patch0009: 0009-RH-trigger-change-uevent-on-new-device-creation.patch
|
Patch0009: 0009-RH-don-t-start-without-a-config-file.patch
|
||||||
Patch0010: 0010-RH-warn-on-invalid-regex-instead-of-failing.patch
|
Patch0010: 0010-RH-use-rpm-optflags-if-present.patch
|
||||||
|
Patch0011: 0011-RH-add-mpathconf.patch
|
||||||
|
Patch0012: 0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||||
|
Patch0013: 0013-RH-trigger-change-uevent-on-new-device-creation.patch
|
||||||
|
Patch0014: 0014-RH-warn-on-invalid-regex-instead-of-failing.patch
|
||||||
|
|
||||||
# runtime
|
# runtime
|
||||||
Requires: %{name}-libs = %{version}-%{release}
|
Requires: %{name}-libs = %{version}-%{release}
|
||||||
@ -98,7 +102,7 @@ This package contains the files needed to develop applications that use
|
|||||||
device-mapper-multipath's libdmmp C API library
|
device-mapper-multipath's libdmmp C API library
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n multipath-tools-847cc43
|
%setup -q -n multipath-tools-0.7.3
|
||||||
%patch0001 -p1
|
%patch0001 -p1
|
||||||
%patch0002 -p1
|
%patch0002 -p1
|
||||||
%patch0003 -p1
|
%patch0003 -p1
|
||||||
@ -109,6 +113,10 @@ device-mapper-multipath's libdmmp C API library
|
|||||||
%patch0008 -p1
|
%patch0008 -p1
|
||||||
%patch0009 -p1
|
%patch0009 -p1
|
||||||
%patch0010 -p1
|
%patch0010 -p1
|
||||||
|
%patch0011 -p1
|
||||||
|
%patch0012 -p1
|
||||||
|
%patch0013 -p1
|
||||||
|
%patch0014 -p1
|
||||||
cp %{SOURCE1} .
|
cp %{SOURCE1} .
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -208,7 +216,11 @@ fi
|
|||||||
%{!?_licensedir:%global license %%doc}
|
%{!?_licensedir:%global license %%doc}
|
||||||
%license COPYING
|
%license COPYING
|
||||||
%{_sbindir}/kpartx
|
%{_sbindir}/kpartx
|
||||||
|
/usr/lib/udev/kpartx_id
|
||||||
%{_mandir}/man8/kpartx.8.gz
|
%{_mandir}/man8/kpartx.8.gz
|
||||||
|
%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
|
||||||
|
|
||||||
%files -n libdmmp
|
%files -n libdmmp
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
@ -230,6 +242,25 @@ fi
|
|||||||
%{_pkgconfdir}/libdmmp.pc
|
%{_pkgconfdir}/libdmmp.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Nov 7 2017 Benjamin Marzinski <bmarzins@redhat.com> 0.7.3-1
|
||||||
|
- Update Source to upstream 0.7.3 release
|
||||||
|
* Previous patch 0001 is included in this commit, and 0002 was solved in a
|
||||||
|
different manner causing some change to previous patch 0003
|
||||||
|
* Previous patches 0003-0010 are now patches 0007-0014
|
||||||
|
- Add 0001-mpathpersist-Fix-invalid-condition-check.patch
|
||||||
|
* Fix incorrect check. posted upstream
|
||||||
|
- Add 0002-multipath-add-man-page-info-for-my-prkey-changes.patch
|
||||||
|
* Add missing man page info. posted upstream
|
||||||
|
- Add 0003-multipath-there-is-no-none-path-state.patch
|
||||||
|
* remove incorrect path state. posted upstream
|
||||||
|
- Add 0004-mutipath-updated-Huawei-storage-config.patch
|
||||||
|
* update builtin device configuration. posted upstream
|
||||||
|
- Add 0005-multipath-fix-doc-typo.patch
|
||||||
|
* fix man page typo. posted upstream
|
||||||
|
- Add 0006-multipath-add-ghost_delay-parameter.patch
|
||||||
|
* add new multipath.conf parameter "ghost_delay". posted upstream
|
||||||
|
|
||||||
|
|
||||||
* Tue Nov 7 2017 Benjamin Marzinski <bmarzins@redhat.com> 0.7.1-8.git847cc43
|
* Tue Nov 7 2017 Benjamin Marzinski <bmarzins@redhat.com> 0.7.1-8.git847cc43
|
||||||
- Refresh 0001-libmultipath-update-3PARdata-builtin-config.patch
|
- Refresh 0001-libmultipath-update-3PARdata-builtin-config.patch
|
||||||
- Add 0010-RH-warn-on-invalid-regex-instead-of-failing.patch
|
- Add 0010-RH-warn-on-invalid-regex-instead-of-failing.patch
|
||||||
|
2
sources
2
sources
@ -1,2 +1,2 @@
|
|||||||
SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942
|
SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942
|
||||||
SHA512 (multipath-tools-git847cc43.tgz) = b7d9fd34a6e171d1382de2eef75c6a0fe522ff4e76b34f682c53b1662559c134bebf84dbae78d64462d1af746b7bbcbfa72ac5282d1225bfd695598dd59d7e37
|
SHA512 (multipath-tools-0.7.3.tgz) = d1e1f4e57ead7a79accf55173263138a78b86c3b846bac8ad2526f36f01fe32a8b7e6bb5bb785b083f3bdbf39c34c06032b7a0d6db6c4cc99e5bc98f67a7e7f3
|
||||||
|
Loading…
Reference in New Issue
Block a user