summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Marzinski <bmarzins@redhat.com>2017-11-07 17:51:09 -0600
committerBenjamin Marzinski <bmarzins@redhat.com>2017-11-07 17:51:09 -0600
commit542c8d8bff557bb8b620443635f22f940001443c (patch)
tree010804191efdefb3d05d784c3aeeeae684a930c0
parent5e7fb0583a274cf135a2c2c6da4522f8efbf2104 (diff)
downloaddevice-mapper-multipath-542c8d8bff557bb8b620443635f22f940001443c.tar.gz
device-mapper-multipath-542c8d8bff557bb8b620443635f22f940001443c.tar.xz
device-mapper-multipath-542c8d8bff557bb8b620443635f22f940001443c.zip
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
-rw-r--r--.gitignore1
-rw-r--r--0001-libmultipath-update-3PARdata-builtin-config.patch28
-rw-r--r--0001-mpathpersist-Fix-invalid-condition-check.patch35
-rw-r--r--0002-multipath-add-man-page-info-for-my-prkey-changes.patch79
-rw-r--r--0002-multipath-attempt-at-common-multipath.rules.patch107
-rw-r--r--0003-RH-fixup-udev-rules-for-redhat.patch110
-rw-r--r--0003-multipath-there-is-no-none-path-state.patch27
-rw-r--r--0004-mutipath-updated-Huawei-storage-config.patch30
-rw-r--r--0005-multipath-fix-doc-typo.patch29
-rw-r--r--0006-multipath-add-ghost_delay-parameter.patch397
-rw-r--r--0007-RH-fixup-udev-rules-for-redhat.patch66
-rw-r--r--0008-RH-Remove-the-property-blacklist-exception-builtin.patch (renamed from 0004-RH-Remove-the-property-blacklist-exception-builtin.patch)4
-rw-r--r--0009-RH-don-t-start-without-a-config-file.patch (renamed from 0005-RH-don-t-start-without-a-config-file.patch)20
-rw-r--r--0010-RH-use-rpm-optflags-if-present.patch (renamed from 0006-RH-use-rpm-optflags-if-present.patch)0
-rw-r--r--0011-RH-add-mpathconf.patch (renamed from 0007-RH-add-mpathconf.patch)6
-rw-r--r--0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch (renamed from 0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch)24
-rw-r--r--0013-RH-trigger-change-uevent-on-new-device-creation.patch (renamed from 0009-RH-trigger-change-uevent-on-new-device-creation.patch)22
-rw-r--r--0014-RH-warn-on-invalid-regex-instead-of-failing.patch (renamed from 0010-RH-warn-on-invalid-regex-instead-of-failing.patch)10
-rw-r--r--device-mapper-multipath.spec61
-rw-r--r--sources2
20 files changed, 754 insertions, 304 deletions
diff --git a/.gitignore b/.gitignore
index 13608b9..7ff8a6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ multipath-tools-091027.tar.gz
/multipath-tools-f21166a.tgz
/multipath.conf
/multipath-tools-git847cc43.tgz
+/multipath-tools-0.7.3.tgz
diff --git a/0001-libmultipath-update-3PARdata-builtin-config.patch b/0001-libmultipath-update-3PARdata-builtin-config.patch
deleted file mode 100644
index 578716a..0000000
--- a/0001-libmultipath-update-3PARdata-builtin-config.patch
+++ /dev/null
@@ -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
-
diff --git a/0001-mpathpersist-Fix-invalid-condition-check.patch b/0001-mpathpersist-Fix-invalid-condition-check.patch
new file mode 100644
index 0000000..4f7b6bb
--- /dev/null
+++ b/0001-mpathpersist-Fix-invalid-condition-check.patch
@@ -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
+
diff --git a/0002-multipath-add-man-page-info-for-my-prkey-changes.patch b/0002-multipath-add-man-page-info-for-my-prkey-changes.patch
new file mode 100644
index 0000000..0ce4f81
--- /dev/null
+++ b/0002-multipath-add-man-page-info-for-my-prkey-changes.patch
@@ -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
+
diff --git a/0002-multipath-attempt-at-common-multipath.rules.patch b/0002-multipath-attempt-at-common-multipath.rules.patch
deleted file mode 100644
index 076c1e0..0000000
--- a/0002-multipath-attempt-at-common-multipath.rules.patch
+++ /dev/null
@@ -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
-
diff --git a/0003-RH-fixup-udev-rules-for-redhat.patch b/0003-RH-fixup-udev-rules-for-redhat.patch
deleted file mode 100644
index fc94375..0000000
--- a/0003-RH-fixup-udev-rules-for-redhat.patch
+++ /dev/null
@@ -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
-
diff --git a/0003-multipath-there-is-no-none-path-state.patch b/0003-multipath-there-is-no-none-path-state.patch
new file mode 100644
index 0000000..e7bbcd4
--- /dev/null
+++ b/0003-multipath-there-is-no-none-path-state.patch
@@ -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
+
diff --git a/0004-mutipath-updated-Huawei-storage-config.patch b/0004-mutipath-updated-Huawei-storage-config.patch
new file mode 100644
index 0000000..dd5e74c
--- /dev/null
+++ b/0004-mutipath-updated-Huawei-storage-config.patch
@@ -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
+
diff --git a/0005-multipath-fix-doc-typo.patch b/0005-multipath-fix-doc-typo.patch
new file mode 100644
index 0000000..30cf241
--- /dev/null
+++ b/0005-multipath-fix-doc-typo.patch
@@ -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
+
diff --git a/0006-multipath-add-ghost_delay-parameter.patch b/0006-multipath-add-ghost_delay-parameter.patch
new file mode 100644
index 0000000..5bb211a
--- /dev/null
+++ b/0006-multipath-add-ghost_delay-parameter.patch
@@ -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
+
diff --git a/0007-RH-fixup-udev-rules-for-redhat.patch b/0007-RH-fixup-udev-rules-for-redhat.patch
new file mode 100644
index 0000000..005ccb1
--- /dev/null
+++ b/0007-RH-fixup-udev-rules-for-redhat.patch
@@ -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
+
diff --git a/0004-RH-Remove-the-property-blacklist-exception-builtin.patch b/0008-RH-Remove-the-property-blacklist-exception-builtin.patch
index 93bf0ba..a4b5770 100644
--- a/0004-RH-Remove-the-property-blacklist-exception-builtin.patch
+++ b/0008-RH-Remove-the-property-blacklist-exception-builtin.patch
@@ -51,10 +51,10 @@ index ee396e2..19d4697 100644
void
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
+++ 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
.B property
Regular expression of the udev property to be whitelisted.
diff --git a/0005-RH-don-t-start-without-a-config-file.patch b/0009-RH-don-t-start-without-a-config-file.patch
index 4e5fb6a..38cbbf0 100644
--- a/0005-RH-don-t-start-without-a-config-file.patch
+++ b/0009-RH-don-t-start-without-a-config-file.patch
@@ -20,18 +20,18 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
5 files changed, 22 insertions(+)
diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 6b23601..9368962 100644
+index 9486116..85e32ee 100644
--- a/libmultipath/config.c
+++ b/libmultipath/config.c
-@@ -25,6 +25,7 @@
- #include "prio.h"
+@@ -26,6 +26,7 @@
#include "devmapper.h"
#include "mpath_cmd.h"
+ #include "propsel.h"
+#include "version.h"
static int
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);
}
@@ -55,10 +55,10 @@ index 6b23601..9368962 100644
conf->processed_main_config = 1;
diff --git a/libmultipath/config.h b/libmultipath/config.h
-index ffc69b5..614331c 100644
+index 67ff983..1dbb9a7 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
-@@ -7,6 +7,7 @@
+@@ -9,6 +9,7 @@
#define ORIGIN_DEFAULT 0
#define ORIGIN_CONFIG 1
@@ -67,19 +67,19 @@ index ffc69b5..614331c 100644
/*
* In kernel, fast_io_fail == 0 means immediate failure on rport delete.
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
-index 4d78b98..5753766 100644
+index bc1a852..2bc0348 100644
--- a/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"
IMPORT{cmdline}="multipath"
ENV{multipath}=="off", GOTO="end_mpath"
+TEST!="/etc/multipath.conf", GOTO="end_mpath"
- KERNEL=="dm-*", GOTO="check_kpartx"
ENV{DEVTYPE}!="partition", GOTO="test_dev"
+ IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
-index 2615728..d64040f 100644
+index 5c96680..0515211 100644
--- a/multipathd/multipathd.8
+++ b/multipathd/multipathd.8
@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy.
diff --git a/0006-RH-use-rpm-optflags-if-present.patch b/0010-RH-use-rpm-optflags-if-present.patch
index 6ec413c..6ec413c 100644
--- a/0006-RH-use-rpm-optflags-if-present.patch
+++ b/0010-RH-use-rpm-optflags-if-present.patch
diff --git a/0007-RH-add-mpathconf.patch b/0011-RH-add-mpathconf.patch
index 885014a..cd3fca0 100644
--- a/0007-RH-add-mpathconf.patch
+++ b/0011-RH-add-mpathconf.patch
@@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
create mode 100644 multipath/mpathconf.8
diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 9368962..bdde113 100644
+index 85e32ee..f1a6ca8 100644
--- a/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, "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));
@@ -33,7 +33,7 @@ index 9368962..bdde113 100644
conf->blist_devnode = vector_alloc();
if (!conf->blist_devnode) {
diff --git a/multipath/Makefile b/multipath/Makefile
-index 1e9ee4b..3d4d459 100644
+index dda5565..d35127a 100644
--- a/multipath/Makefile
+++ b/multipath/Makefile
@@ -18,10 +18,12 @@ $(EXEC): $(OBJS)
diff --git a/0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
index ad6f505..a5ef7bd 100644
--- a/0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
+++ b/0012-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
@@ -85,7 +85,7 @@ index 9527012..b665232 100644
#endif /* _WWIDS_H */
diff --git a/multipath/main.c b/multipath/main.c
-index dede017..9dda21d 100644
+index bffe065..2e69300 100644
--- a/multipath/main.c
+++ b/multipath/main.c
@@ -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"
+ " parameters to wwids file\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"
- " -d dry run, do not create or update devmaps\n"
-@@ -522,7 +524,7 @@ main (int argc, char *argv[])
+@@ -598,7 +600,7 @@ main (int argc, char *argv[])
exit(1);
multipath_conf = conf;
conf->retrigger_tries = 0;
-- while ((arg = getopt(argc, argv, ":adchl::FfM:v:p:b:BrR:itquwW")) != EOF ) {
-+ while ((arg = getopt(argc, argv, ":aAdchl::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, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
switch(arg) {
case 1: printf("optarg : %s\n",optarg);
break;
-@@ -586,6 +588,10 @@ main (int argc, char *argv[])
+@@ -665,6 +667,10 @@ main (int argc, char *argv[])
case 't':
r = dump_config(conf);
goto out_free_config;
@@ -127,19 +127,19 @@ index dede017..9dda21d 100644
usage(argv[0]);
exit(0);
diff --git a/multipath/multipath.8 b/multipath/multipath.8
-index b9436e5..b9ad6b1 100644
+index 56f8703..9fc2317 100644
--- a/multipath/multipath.8
+++ b/multipath/multipath.8
@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
.RB [\| \-b\ \c
.IR bindings_file \|]
.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 | \-q | \|-r | \|-i | \-a | \-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 | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|]
.RB [\| \-p\ \c
.IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
.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
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
+.
.TP
- .B \-w
- Remove the WWID for the specified device from the WWIDs file.
+ .B \-U
+ Check if the device specified in the program environment is a multipath device
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
index fafd088..a623a3f 100644
--- a/multipathd/multipathd.service
diff --git a/0009-RH-trigger-change-uevent-on-new-device-creation.patch b/0013-RH-trigger-change-uevent-on-new-device-creation.patch
index 8e20b18..391485e 100644
--- a/0009-RH-trigger-change-uevent-on-new-device-creation.patch
+++ b/0013-RH-trigger-change-uevent-on-new-device-creation.patch
@@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
5 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
-index bd090d9..843dd09 100644
+index e2f393f..64d7751 100644
--- a/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);
}
@@ -53,7 +53,7 @@ index bd090d9..843dd09 100644
static int
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
*/
mpp->force_udev_reload = 0;
@@ -65,13 +65,13 @@ index bd090d9..843dd09 100644
/* multipath client mode */
dm_switchgroup(mpp->alias, mpp->bestpg);
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
-index fd7f581..253e29b 100644
+index 0ffc28e..09603ba 100644
--- a/libmultipath/configure.h
+++ b/libmultipath/configure.h
-@@ -36,3 +36,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
- vector pathvec, char **wwid);
+@@ -37,3 +37,4 @@ int get_refwwid (enum mpath_cmds cmd, char * dev, enum devtypes dev_type,
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);
+ struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
+void trigger_paths_udev_change(const struct multipath *mpp);
diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
index 88bb72b..249c6c1 100644
@@ -96,10 +96,10 @@ index 88bb72b..249c6c1 100644
}
else {
diff --git a/multipath/main.c b/multipath/main.c
-index 9dda21d..baae256 100644
+index 2e69300..4dde5af 100644
--- a/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) {
r = remember_wwid(refwwid);
@@ -109,10 +109,10 @@ index 9dda21d..baae256 100644
else
printf("failed adding '%s' to wwids file\n",
diff --git a/multipathd/main.c b/multipathd/main.c
-index 4be2c57..fc5b18a 100644
+index c475fcd..50749a8 100644
--- a/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);
vector_foreach_slot(mpvec, mpp, i){
@@ -122,7 +122,7 @@ index 4be2c57..fc5b18a 100644
update_map_pr(mpp);
}
-@@ -2175,10 +2176,6 @@ reconfigure (struct vectors * vecs)
+@@ -2220,10 +2221,6 @@ reconfigure (struct vectors * vecs)
conf->verbosity = verbosity;
if (bindings_read_only)
conf->bindings_read_only = bindings_read_only;
diff --git a/0010-RH-warn-on-invalid-regex-instead-of-failing.patch b/0014-RH-warn-on-invalid-regex-instead-of-failing.patch
index 298b7ac..22a66a2 100644
--- a/0010-RH-warn-on-invalid-regex-instead-of-failing.patch
+++ b/0014-RH-warn-on-invalid-regex-instead-of-failing.patch
@@ -16,10 +16,10 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
3 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index 82066f6..c68d6f1 100644
+index 54652d4..8d97602 100644
--- a/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
@@ -41,7 +41,7 @@ index 82066f6..c68d6f1 100644
set_yes_no(vector strvec, void *ptr)
{
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) \
return 1; \
\
@@ -50,7 +50,7 @@ index 82066f6..c68d6f1 100644
if (!buff) \
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) \
return 1; \
\
@@ -59,7 +59,7 @@ index 82066f6..c68d6f1 100644
if (!buff) \
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;
}
diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec
index 6c8aca1..332e5ed 100644
--- a/device-mapper-multipath.spec
+++ b/device-mapper-multipath.spec
@@ -1,26 +1,30 @@
Summary: Tools to manage multipath devices using device-mapper
Name: device-mapper-multipath
-Version: 0.7.1
-Release: 8.git847cc43%{?dist}
+Version: 0.7.3
+Release: 1%{?dist}
License: GPL+
Group: System Environment/Base
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 "https://git.opensvc.com/?p=multipath-tools/.git;a=snapshot;h=847cc43;sf=tgz" -o multipath-tools-git847cc43.tgz
-Source0: 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-0.7.3.tgz
Source1: multipath.conf
-Patch0001: 0001-libmultipath-update-3PARdata-builtin-config.patch
-Patch0002: 0002-multipath-attempt-at-common-multipath.rules.patch
-Patch0003: 0003-RH-fixup-udev-rules-for-redhat.patch
-Patch0004: 0004-RH-Remove-the-property-blacklist-exception-builtin.patch
-Patch0005: 0005-RH-don-t-start-without-a-config-file.patch
-Patch0006: 0006-RH-use-rpm-optflags-if-present.patch
-Patch0007: 0007-RH-add-mpathconf.patch
-Patch0008: 0008-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
-Patch0009: 0009-RH-trigger-change-uevent-on-new-device-creation.patch
-Patch0010: 0010-RH-warn-on-invalid-regex-instead-of-failing.patch
+Patch0001: 0001-mpathpersist-Fix-invalid-condition-check.patch
+Patch0002: 0002-multipath-add-man-page-info-for-my-prkey-changes.patch
+Patch0003: 0003-multipath-there-is-no-none-path-state.patch
+Patch0004: 0004-mutipath-updated-Huawei-storage-config.patch
+Patch0005: 0005-multipath-fix-doc-typo.patch
+Patch0006: 0006-multipath-add-ghost_delay-parameter.patch
+Patch0007: 0007-RH-fixup-udev-rules-for-redhat.patch
+Patch0008: 0008-RH-Remove-the-property-blacklist-exception-builtin.patch
+Patch0009: 0009-RH-don-t-start-without-a-config-file.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
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
%prep
-%setup -q -n multipath-tools-847cc43
+%setup -q -n multipath-tools-0.7.3
%patch0001 -p1
%patch0002 -p1
%patch0003 -p1
@@ -109,6 +113,10 @@ device-mapper-multipath's libdmmp C API library
%patch0008 -p1
%patch0009 -p1
%patch0010 -p1
+%patch0011 -p1
+%patch0012 -p1
+%patch0013 -p1
+%patch0014 -p1
cp %{SOURCE1} .
%build
@@ -208,7 +216,11 @@ fi
%{!?_licensedir:%global license %%doc}
%license COPYING
%{_sbindir}/kpartx
+/usr/lib/udev/kpartx_id
%{_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
%defattr(-,root,root,-)
@@ -230,6 +242,25 @@ fi
%{_pkgconfdir}/libdmmp.pc
%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
- Refresh 0001-libmultipath-update-3PARdata-builtin-config.patch
- Add 0010-RH-warn-on-invalid-regex-instead-of-failing.patch
diff --git a/sources b/sources
index 6cea34d..cc13e36 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942
-SHA512 (multipath-tools-git847cc43.tgz) = b7d9fd34a6e171d1382de2eef75c6a0fe522ff4e76b34f682c53b1662559c134bebf84dbae78d64462d1af746b7bbcbfa72ac5282d1225bfd695598dd59d7e37
+SHA512 (multipath-tools-0.7.3.tgz) = d1e1f4e57ead7a79accf55173263138a78b86c3b846bac8ad2526f36f01fe32a8b7e6bb5bb785b083f3bdbf39c34c06032b7a0d6db6c4cc99e5bc98f67a7e7f3