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.conf
|
||||
/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
|
||||
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.
|
@ -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.
|
@ -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)
|
@ -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
|
@ -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;
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
2
sources
2
sources
@ -1,2 +1,2 @@
|
||||
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