device-mapper-multipath-0.8.0-1
Update Source to upstream version 0.8.0 * Previous patches 0006 & 0007 are included in this commit Rename files * Previous patches 0008-0016 & 0100 are now patches 0018-0027 Add 0006-multipathd-Fix-miscounting-active-paths.patch Add 0007-multipathd-ignore-failed-wwid-recheck.patch * multipathd will no longer disable paths if it is unable to get their wwid on a change event Add 0008-libmutipath-continue-to-use-old-state-on-PATH_PENDIN.patch Add 0009-multipathd-use-update_path_groups-instead-of-reload_.patch Add 0010-multipath.conf-add-missing-options-to-man-page.patch Add 0011-libmultipath-add-get_uid-fallback-code-for-NVMe-devi.patch Add 0012-libmulitpath-cleanup-uid_fallback-code.patch Add 0013-multipathd-handle-changed-wwids-by-removal-and-addit.patch * if a path device changes wwid, it will now be removed and re-added to the correct multipath device. Add 0014-multipathd-remove-wwid_changed-path-attribute.patch Add 0015-multipathd-ignore-disable_changed_wwids.patch Add 0016-multipathd-Don-t-use-fallback-code-after-getting-wwi.patch Add 0017-libmultipath-silence-dm_is_mpath-error-messages.patch * The above 12 patches have been submitted upstream
This commit is contained in:
parent
a4dbf985b2
commit
35f5570500
1
.gitignore
vendored
1
.gitignore
vendored
@ -17,3 +17,4 @@ multipath-tools-091027.tar.gz
|
||||
/multipath-tools-0.7.9.tgz
|
||||
/multipath-tools-17a6101.tgz
|
||||
/multipath-tools-2df6110.tgz
|
||||
/multipath-tools-0.8.0.tgz
|
||||
|
@ -52,10 +52,10 @@ index 1cb3ffe..416e13a 100644
|
||||
}
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 491832b..cac9050 100644
|
||||
index fb520b6..fe6d8ef 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2075,7 +2075,8 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
@@ -2079,7 +2079,8 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -159,10 +159,10 @@ index bbf31b4..53d6d7d 100644
|
||||
|
||||
#endif /* _IO_ERR_STAT_H */
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index cac9050..0e3ac2c 100644
|
||||
index fe6d8ef..43830e8 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2076,7 +2076,7 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
@@ -2080,7 +2080,7 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
}
|
||||
|
||||
if ((newstate == PATH_UP || newstate == PATH_GHOST) &&
|
||||
|
92
0006-multipathd-Fix-miscounting-active-paths.patch
Normal file
92
0006-multipathd-Fix-miscounting-active-paths.patch
Normal file
@ -0,0 +1,92 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 15 Feb 2019 17:19:46 -0600
|
||||
Subject: [PATCH] multipathd: Fix miscounting active paths
|
||||
|
||||
When multipathd gets a change uevent, it calls pathinfo with DI_NOIO.
|
||||
This sets the path state to the return value of path_offline(). If a
|
||||
path is in the PATH_DOWN state but path_offline() returns PATH_UP, when
|
||||
that path gets a change event, its state will get moved to PATH_UP
|
||||
without either reinstating the path, or reloading the map. The next
|
||||
call to check_path() will move the path back to PATH_DOWN. Since
|
||||
check_path() simply increments and decrements nr_active instead of
|
||||
calculating it based on the actual number of active paths, nr_active
|
||||
will get decremented a second time for this failed path, potentially
|
||||
putting the multipath device into recovery mode.
|
||||
|
||||
This commit does two things to avoid this situation. It makes the
|
||||
DI_NOIO flag only set pp->state in pathinfo() if DI_CHECKER is also set.
|
||||
This isn't set in uev_update_path() to avoid changing the path state in
|
||||
this case. Also, to guard against pp->state getting changed in some
|
||||
other code path without properly updating the map state, check_path()
|
||||
now calls set_no_path_retry, which recalculates nr_active based on the
|
||||
actual number of active paths, and makes sure that the queue_if_no_path
|
||||
value in the features line is correct.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 11 ++++++-----
|
||||
multipath/main.c | 2 +-
|
||||
multipathd/main.c | 4 +++-
|
||||
3 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index 10bd8cd..729bcb9 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1914,11 +1914,12 @@ int pathinfo(struct path *pp, struct config *conf, int mask)
|
||||
if (path_state == PATH_REMOVED)
|
||||
goto blank;
|
||||
else if (mask & DI_NOIO) {
|
||||
- /*
|
||||
- * Avoid any IO on the device itself.
|
||||
- * Behave like DI_CHECKER in the "path unavailable" case.
|
||||
- */
|
||||
- pp->chkrstate = pp->state = path_state;
|
||||
+ if (mask & DI_CHECKER)
|
||||
+ /*
|
||||
+ * Avoid any IO on the device itself.
|
||||
+ * simply use the path_offline() return as its state
|
||||
+ */
|
||||
+ pp->chkrstate = pp->state = path_state;
|
||||
return PATHINFO_OK;
|
||||
}
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 5abb118..69141db 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -356,7 +356,7 @@ static int check_usable_paths(struct config *conf,
|
||||
pp->udev = get_udev_device(pp->dev_t, DEV_DEVT);
|
||||
if (pp->udev == NULL)
|
||||
continue;
|
||||
- if (pathinfo(pp, conf, DI_SYSFS|DI_NOIO) != PATHINFO_OK)
|
||||
+ if (pathinfo(pp, conf, DI_SYSFS|DI_NOIO|DI_CHECKER) != PATHINFO_OK)
|
||||
continue;
|
||||
|
||||
if (pp->state == PATH_UP &&
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 43830e8..678ecf8 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -392,7 +392,8 @@ static void set_no_path_retry(struct multipath *mpp)
|
||||
default:
|
||||
if (mpp->nr_active > 0) {
|
||||
mpp->retry_tick = 0;
|
||||
- dm_queue_if_no_path(mpp->alias, 1);
|
||||
+ if (!is_queueing)
|
||||
+ dm_queue_if_no_path(mpp->alias, 1);
|
||||
} else if (is_queueing && mpp->retry_tick == 0)
|
||||
enter_recovery_mode(mpp);
|
||||
break;
|
||||
@@ -2072,6 +2073,7 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
/* if update_multipath_strings orphaned the path, quit early */
|
||||
if (!pp->mpp)
|
||||
return 0;
|
||||
+ set_no_path_retry(pp->mpp);
|
||||
|
||||
if ((newstate == PATH_UP || newstate == PATH_GHOST) &&
|
||||
check_path_reinstate_state(pp)) {
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,54 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 6 Feb 2019 12:01:32 -0600
|
||||
Subject: [PATCH] multipathd: avoid null pointer dereference in LOG_MSG
|
||||
|
||||
LOG_MSG() will dereference pp->mpp. Commit cb5ec664 added a call to
|
||||
LOG_MSG() before the check for (!pp->mpp) in check_path. This can cause
|
||||
multipathd to crash. LOG_MSG() should only be called if pp->mpp is set
|
||||
and a checker is selected.
|
||||
|
||||
Also, checker_message() should fail to a generic message if c->cls isn't
|
||||
set (which means that a checker hasn't been selected).
|
||||
|
||||
Fixes: cb5ec664 (multipathd: check_path: improve logging for "unusable
|
||||
path" case)
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/checkers.c | 2 +-
|
||||
multipathd/main.c | 6 ++++--
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
|
||||
index 848c4c3..ca95cae 100644
|
||||
--- a/libmultipath/checkers.c
|
||||
+++ b/libmultipath/checkers.c
|
||||
@@ -295,7 +295,7 @@ const char *checker_message(const struct checker *c)
|
||||
{
|
||||
int id;
|
||||
|
||||
- if (!c || c->msgid < 0 ||
|
||||
+ if (!c || !c->cls || c->msgid < 0 ||
|
||||
(c->msgid >= CHECKER_GENERIC_MSGTABLE_SIZE &&
|
||||
c->msgid < CHECKER_FIRST_MSGID))
|
||||
goto bad_id;
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 0e3ac2c..1caa40f 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2017,8 +2017,10 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
}
|
||||
|
||||
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED) {
|
||||
- condlog(2, "%s: unusable path - checker failed", pp->dev);
|
||||
- LOG_MSG(2, verbosity, pp);
|
||||
+ condlog(2, "%s: unusable path (%s) - checker failed", pp->dev,
|
||||
+ checker_state_name(newstate));
|
||||
+ if (pp->mpp && checker_selected(&pp->checker))
|
||||
+ LOG_MSG(2, verbosity, pp);
|
||||
conf = get_multipath_config();
|
||||
pthread_cleanup_push(put_multipath_config, conf);
|
||||
pathinfo(pp, conf, 0);
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,40 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 6 Feb 2019 13:46:10 -0600
|
||||
Subject: [PATCH] multipath: blacklist zram devices
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/blacklist.c | 2 +-
|
||||
multipath/multipath.conf.5 | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
|
||||
index 709895e..e0d0279 100644
|
||||
--- a/libmultipath/blacklist.c
|
||||
+++ b/libmultipath/blacklist.c
|
||||
@@ -192,7 +192,7 @@ setup_default_blist (struct config * conf)
|
||||
char * str;
|
||||
int i;
|
||||
|
||||
- str = STRDUP("^(ram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]");
|
||||
+ str = STRDUP("^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]");
|
||||
if (!str)
|
||||
return 1;
|
||||
if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 88b8edd..0fe8461 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1218,7 +1218,7 @@ Regular expression matching the device nodes to be excluded/included.
|
||||
.RS
|
||||
.PP
|
||||
The default \fIblacklist\fR consists of the regular expressions
|
||||
-"^(ram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]" and
|
||||
+"^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]" and
|
||||
"^(td|hd|vd)[a-z]". This causes virtual devices, non-disk devices, and some other
|
||||
device types to be excluded from multipath handling by default.
|
||||
.RE
|
||||
--
|
||||
2.17.2
|
||||
|
71
0007-multipathd-ignore-failed-wwid-recheck.patch
Normal file
71
0007-multipathd-ignore-failed-wwid-recheck.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 20 Feb 2019 17:05:08 -0600
|
||||
Subject: [PATCH] multipathd: ignore failed wwid recheck
|
||||
|
||||
If disable_changed_wwids is set, when multipathd gets a change event on
|
||||
a path, it verifies that the wwid hasn't changed in uev_update_path().
|
||||
If get_uid() failed, uev_update_path treated this as a wwid change to 0.
|
||||
This could cause paths to suddenly be dropped due to an issue with
|
||||
getting the wwid. Even if get_uid() failed because the path was down,
|
||||
it no change uevent happend when it later became active, multipathd
|
||||
would continue to ignore the path. Also, scsi_uid_fallback() clears the
|
||||
failure return if it doesn't attempt to fallback, causing get_uid()
|
||||
to return success, when it actually failed.
|
||||
|
||||
Multipathd should neither set nor clear wwid_changed if get_uid()
|
||||
returned failure. Also, scsi_uid_fallback() should retain the old return
|
||||
value if it doesn't attempt to fallback.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 6 +++---
|
||||
multipathd/main.c | 6 ++++--
|
||||
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index 729bcb9..b08cb2d 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1755,9 +1755,9 @@ get_vpd_uid(struct path * pp)
|
||||
}
|
||||
|
||||
static ssize_t scsi_uid_fallback(struct path *pp, int path_state,
|
||||
- const char **origin)
|
||||
+ const char **origin, ssize_t old_len)
|
||||
{
|
||||
- ssize_t len = 0;
|
||||
+ ssize_t len = old_len;
|
||||
int retrigger;
|
||||
struct config *conf;
|
||||
|
||||
@@ -1828,7 +1828,7 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
origin = "sysfs";
|
||||
}
|
||||
if (len <= 0 && pp->bus == SYSFS_BUS_SCSI)
|
||||
- len = scsi_uid_fallback(pp, path_state, &origin);
|
||||
+ len = scsi_uid_fallback(pp, path_state, &origin, len);
|
||||
}
|
||||
if ( len < 0 ) {
|
||||
condlog(1, "%s: failed to get %s uid: %s",
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 678ecf8..fd83a6a 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1234,9 +1234,11 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
goto out;
|
||||
|
||||
strcpy(wwid, pp->wwid);
|
||||
- get_uid(pp, pp->state, uev->udev);
|
||||
+ rc = get_uid(pp, pp->state, uev->udev);
|
||||
|
||||
- if (strncmp(wwid, pp->wwid, WWID_SIZE) != 0) {
|
||||
+ if (rc != 0)
|
||||
+ strcpy(pp->wwid, wwid);
|
||||
+ else if (strncmp(wwid, pp->wwid, WWID_SIZE) != 0) {
|
||||
condlog(0, "%s: path wwid changed from '%s' to '%s'. %s",
|
||||
uev->kernel, wwid, pp->wwid,
|
||||
(disable_changed_wwids ? "disallowing" :
|
||||
--
|
||||
2.17.2
|
||||
|
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 21 Feb 2019 13:05:43 -0600
|
||||
Subject: [PATCH] libmutipath: continue to use old state on PATH_PENDING
|
||||
|
||||
When pathinfo() sets pp->state to PATH_PENDING, it can cause problems
|
||||
with path checking. It should act more like check_path(). When
|
||||
check_path() sees a new state of PATH_PENDING, it doesn't update the
|
||||
path state at all, so a path's old state is normally never PATH_PENDING.
|
||||
|
||||
As and example of the problems of setting a path to PATH_PENDING, If
|
||||
check_path() sets a path's state to PATH_UP, then a call to pathinfo()
|
||||
sets the state to PATH_PENDING, and then another call the check_path()
|
||||
sets the state to PATH_DOWN, multipathd won't fail the path in the
|
||||
kernel. Also, if a path's state is PATH_PENDING, and nr_active is
|
||||
recalculated, that path will count as down, even if the state was
|
||||
previously PATH_UP. If a path already has a state of PATH_WILD or
|
||||
PATH_UNCHECKED, changing it to PATH_PENDING won't hurt anything, and it
|
||||
will help anyone who sees it know what's actually happening. But
|
||||
otherwise, pathinfo() should leave the previous state alone.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index b08cb2d..28c00e5 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1946,8 +1946,11 @@ int pathinfo(struct path *pp, struct config *conf, int mask)
|
||||
|
||||
if (mask & DI_CHECKER) {
|
||||
if (path_state == PATH_UP) {
|
||||
- pp->chkrstate = pp->state = get_state(pp, conf, 0,
|
||||
- path_state);
|
||||
+ int newstate = get_state(pp, conf, 0, path_state);
|
||||
+ if (newstate != PATH_PENDING ||
|
||||
+ pp->state == PATH_UNCHECKED ||
|
||||
+ pp->state == PATH_WILD)
|
||||
+ pp->chkrstate = pp->state = newstate;
|
||||
if (pp->state == PATH_TIMEOUT)
|
||||
pp->state = PATH_DOWN;
|
||||
if (pp->state == PATH_UP && !pp->size) {
|
||||
--
|
||||
2.17.2
|
||||
|
@ -0,0 +1,76 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 21 Feb 2019 17:00:17 -0600
|
||||
Subject: [PATCH] multipathd: use update_path_groups instead of reload_map
|
||||
|
||||
reload_map() doesn't do the work to sync the state after reloading the
|
||||
map. Instead of calling it directly, cli_reload() and uev_update_path()
|
||||
should call update_path_groups(), which calls reload_map() with all the
|
||||
necessary syncing.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 2 +-
|
||||
multipathd/main.c | 13 ++++++++-----
|
||||
multipathd/main.h | 2 ++
|
||||
3 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index f95813e..60e17d6 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -877,7 +877,7 @@ cli_reload(void *v, char **reply, int *len, void *data)
|
||||
return 1;
|
||||
}
|
||||
|
||||
- return reload_map(vecs, mpp, 0, 1);
|
||||
+ return update_path_groups(mpp, vecs, 0);
|
||||
}
|
||||
|
||||
int resize_map(struct multipath *mpp, unsigned long long size,
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index fd83a6a..7a317d9 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1273,10 +1273,13 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
else {
|
||||
if (ro == 1)
|
||||
pp->mpp->force_readonly = 1;
|
||||
- retval = reload_map(vecs, mpp, 0, 1);
|
||||
- pp->mpp->force_readonly = 0;
|
||||
- condlog(2, "%s: map %s reloaded (retval %d)",
|
||||
- uev->kernel, mpp->alias, retval);
|
||||
+ retval = update_path_groups(mpp, vecs, 0);
|
||||
+ if (retval == 2)
|
||||
+ condlog(2, "%s: map removed during reload", pp->dev);
|
||||
+ else {
|
||||
+ pp->mpp->force_readonly = 0;
|
||||
+ condlog(2, "%s: map %s reloaded (retval %d)", uev->kernel, mpp->alias, retval);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1832,7 +1835,7 @@ int update_path_groups(struct multipath *mpp, struct vectors *vecs, int refresh)
|
||||
|
||||
dm_lib_release();
|
||||
if (setup_multipath(vecs, mpp) != 0)
|
||||
- return 1;
|
||||
+ return 2;
|
||||
sync_map_state(mpp);
|
||||
|
||||
return 0;
|
||||
diff --git a/multipathd/main.h b/multipathd/main.h
|
||||
index 8fd426b..e5c1398 100644
|
||||
--- a/multipathd/main.h
|
||||
+++ b/multipathd/main.h
|
||||
@@ -43,5 +43,7 @@ int __setup_multipath (struct vectors * vecs, struct multipath * mpp,
|
||||
int reset);
|
||||
#define setup_multipath(vecs, mpp) __setup_multipath(vecs, mpp, 1)
|
||||
int update_multipath (struct vectors *vecs, char *mapname, int reset);
|
||||
+int update_path_groups(struct multipath *mpp, struct vectors *vecs,
|
||||
+ int refresh);
|
||||
|
||||
#endif /* MAIN_H */
|
||||
--
|
||||
2.17.2
|
||||
|
56
0010-multipath.conf-add-missing-options-to-man-page.patch
Normal file
56
0010-multipath.conf-add-missing-options-to-man-page.patch
Normal file
@ -0,0 +1,56 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Tue, 26 Feb 2019 12:22:59 -0600
|
||||
Subject: [PATCH] multipath.conf: add missing options to man page
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipath/multipath.conf.5 | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 0fe8461..864d7eb 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1468,6 +1468,8 @@ section:
|
||||
.TP
|
||||
.B uid_attribute
|
||||
.TP
|
||||
+.B getuid_callout
|
||||
+.TP
|
||||
.B path_selector
|
||||
.TP
|
||||
.B path_checker
|
||||
@@ -1494,6 +1496,8 @@ section:
|
||||
.TP
|
||||
.B flush_on_last_del
|
||||
.TP
|
||||
+.B user_friendly_names
|
||||
+.TP
|
||||
.B retain_attached_hw_handler
|
||||
.TP
|
||||
.B detect_prio
|
||||
@@ -1525,6 +1529,8 @@ section:
|
||||
.B max_sectors_kb
|
||||
.TP
|
||||
.B ghost_delay
|
||||
+.TP
|
||||
+.B all_tg_pt
|
||||
.RE
|
||||
.PD
|
||||
.LP
|
||||
@@ -1604,7 +1610,11 @@ the values are taken from the \fIdevices\fR or \fIdefaults\fR sections:
|
||||
.TP
|
||||
.B skip_kpartx
|
||||
.TP
|
||||
+.B max_sectors_kb
|
||||
+.TP
|
||||
.B ghost_delay
|
||||
+.TP
|
||||
+.B all_tg_pt
|
||||
.RE
|
||||
.PD
|
||||
.LP
|
||||
--
|
||||
2.17.2
|
||||
|
@ -0,0 +1,90 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 7 Mar 2019 16:14:35 -0600
|
||||
Subject: [PATCH] libmultipath: add get_uid fallback code for NVMe devices
|
||||
|
||||
If multipath can't get the uid for NVMe devices from udev, it can get it
|
||||
directly from sysfs.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 49 ++++++++++++++++++++++++++++------------
|
||||
1 file changed, 34 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index 28c00e5..bece67c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1754,8 +1754,8 @@ get_vpd_uid(struct path * pp)
|
||||
return get_vpd_sysfs(parent, 0x83, pp->wwid, WWID_SIZE);
|
||||
}
|
||||
|
||||
-static ssize_t scsi_uid_fallback(struct path *pp, int path_state,
|
||||
- const char **origin, ssize_t old_len)
|
||||
+static ssize_t uid_fallback(struct path *pp, int path_state,
|
||||
+ const char **origin, ssize_t old_len)
|
||||
{
|
||||
ssize_t len = old_len;
|
||||
int retrigger;
|
||||
@@ -1764,17 +1764,36 @@ static ssize_t scsi_uid_fallback(struct path *pp, int path_state,
|
||||
conf = get_multipath_config();
|
||||
retrigger = conf->retrigger_tries;
|
||||
put_multipath_config(conf);
|
||||
- if (pp->retriggers >= retrigger &&
|
||||
- !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) {
|
||||
- len = get_vpd_uid(pp);
|
||||
- *origin = "sysfs";
|
||||
- pp->uid_attribute = NULL;
|
||||
- if (len < 0 && path_state == PATH_UP) {
|
||||
- condlog(1, "%s: failed to get sysfs uid: %s",
|
||||
- pp->dev, strerror(-len));
|
||||
- len = get_vpd_sgio(pp->fd, 0x83, pp->wwid,
|
||||
- WWID_SIZE);
|
||||
- *origin = "sgio";
|
||||
+ if (pp->retriggers >= retrigger) {
|
||||
+ if (pp->bus == SYSFS_BUS_SCSI &&
|
||||
+ !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) {
|
||||
+ len = get_vpd_uid(pp);
|
||||
+ *origin = "sysfs";
|
||||
+ pp->uid_attribute = NULL;
|
||||
+ if (len < 0 && path_state == PATH_UP) {
|
||||
+ condlog(1, "%s: failed to get sysfs uid: %s",
|
||||
+ pp->dev, strerror(-len));
|
||||
+ len = get_vpd_sgio(pp->fd, 0x83, pp->wwid,
|
||||
+ WWID_SIZE);
|
||||
+ *origin = "sgio";
|
||||
+ }
|
||||
+ } else if (pp->bus == SYSFS_BUS_NVME) {
|
||||
+ char value[256];
|
||||
+ len = sysfs_attr_get_value(pp->udev, "wwid", value,
|
||||
+ sizeof(value));
|
||||
+ if (len <= 0)
|
||||
+ return -1;
|
||||
+ len = strlcpy(pp->wwid, value, WWID_SIZE);
|
||||
+ if (len >= WWID_SIZE) {
|
||||
+ len = fix_broken_nvme_wwid(pp, value,
|
||||
+ WWID_SIZE);
|
||||
+ if (len > 0)
|
||||
+ return len;
|
||||
+ condlog(0, "%s: wwid overflow", pp->dev);
|
||||
+ len = WWID_SIZE;
|
||||
+ }
|
||||
+ *origin = "sysfs";
|
||||
+ pp->uid_attribute = NULL;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
@@ -1827,8 +1846,8 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
len = get_vpd_uid(pp);
|
||||
origin = "sysfs";
|
||||
}
|
||||
- if (len <= 0 && pp->bus == SYSFS_BUS_SCSI)
|
||||
- len = scsi_uid_fallback(pp, path_state, &origin, len);
|
||||
+ if (len <= 0)
|
||||
+ len = uid_fallback(pp, path_state, &origin, len);
|
||||
}
|
||||
if ( len < 0 ) {
|
||||
condlog(1, "%s: failed to get %s uid: %s",
|
||||
--
|
||||
2.17.2
|
||||
|
129
0012-libmulitpath-cleanup-uid_fallback-code.patch
Normal file
129
0012-libmulitpath-cleanup-uid_fallback-code.patch
Normal file
@ -0,0 +1,129 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 27 Mar 2019 12:21:57 -0500
|
||||
Subject: [PATCH] libmulitpath: cleanup uid_fallback code
|
||||
|
||||
Instead of always calling uid_fallback() if the configured method to get
|
||||
the uid failed, get_uid now checks if the path supports fallbacks and if
|
||||
all the retriggers have occurred. If so, it calls uid_fallback(), which
|
||||
just attempts to get the uid using the appropriate fallback method. None
|
||||
of these changes should make the code function any differently.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 85 ++++++++++++++++++++++------------------
|
||||
1 file changed, 46 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index bece67c..3ec60d6 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1755,50 +1755,50 @@ get_vpd_uid(struct path * pp)
|
||||
}
|
||||
|
||||
static ssize_t uid_fallback(struct path *pp, int path_state,
|
||||
- const char **origin, ssize_t old_len)
|
||||
+ const char **origin)
|
||||
{
|
||||
- ssize_t len = old_len;
|
||||
- int retrigger;
|
||||
- struct config *conf;
|
||||
-
|
||||
- conf = get_multipath_config();
|
||||
- retrigger = conf->retrigger_tries;
|
||||
- put_multipath_config(conf);
|
||||
- if (pp->retriggers >= retrigger) {
|
||||
- if (pp->bus == SYSFS_BUS_SCSI &&
|
||||
- !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) {
|
||||
- len = get_vpd_uid(pp);
|
||||
- *origin = "sysfs";
|
||||
- pp->uid_attribute = NULL;
|
||||
- if (len < 0 && path_state == PATH_UP) {
|
||||
- condlog(1, "%s: failed to get sysfs uid: %s",
|
||||
- pp->dev, strerror(-len));
|
||||
- len = get_vpd_sgio(pp->fd, 0x83, pp->wwid,
|
||||
+ ssize_t len = -1;
|
||||
+
|
||||
+ if (pp->bus == SYSFS_BUS_SCSI &&
|
||||
+ !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) {
|
||||
+ len = get_vpd_uid(pp);
|
||||
+ *origin = "sysfs";
|
||||
+ pp->uid_attribute = NULL;
|
||||
+ if (len < 0 && path_state == PATH_UP) {
|
||||
+ condlog(1, "%s: failed to get sysfs uid: %s",
|
||||
+ pp->dev, strerror(-len));
|
||||
+ len = get_vpd_sgio(pp->fd, 0x83, pp->wwid,
|
||||
+ WWID_SIZE);
|
||||
+ *origin = "sgio";
|
||||
+ }
|
||||
+ } else if (pp->bus == SYSFS_BUS_NVME) {
|
||||
+ char value[256];
|
||||
+ len = sysfs_attr_get_value(pp->udev, "wwid", value,
|
||||
+ sizeof(value));
|
||||
+ if (len <= 0)
|
||||
+ return -1;
|
||||
+ len = strlcpy(pp->wwid, value, WWID_SIZE);
|
||||
+ if (len >= WWID_SIZE) {
|
||||
+ len = fix_broken_nvme_wwid(pp, value,
|
||||
WWID_SIZE);
|
||||
- *origin = "sgio";
|
||||
- }
|
||||
- } else if (pp->bus == SYSFS_BUS_NVME) {
|
||||
- char value[256];
|
||||
- len = sysfs_attr_get_value(pp->udev, "wwid", value,
|
||||
- sizeof(value));
|
||||
- if (len <= 0)
|
||||
- return -1;
|
||||
- len = strlcpy(pp->wwid, value, WWID_SIZE);
|
||||
- if (len >= WWID_SIZE) {
|
||||
- len = fix_broken_nvme_wwid(pp, value,
|
||||
- WWID_SIZE);
|
||||
- if (len > 0)
|
||||
- return len;
|
||||
- condlog(0, "%s: wwid overflow", pp->dev);
|
||||
- len = WWID_SIZE;
|
||||
- }
|
||||
- *origin = "sysfs";
|
||||
- pp->uid_attribute = NULL;
|
||||
+ if (len > 0)
|
||||
+ return len;
|
||||
+ condlog(0, "%s: wwid overflow", pp->dev);
|
||||
+ len = WWID_SIZE;
|
||||
}
|
||||
+ *origin = "sysfs";
|
||||
+ pp->uid_attribute = NULL;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
+static int has_uid_fallback(struct path *pp)
|
||||
+{
|
||||
+ return ((pp->bus == SYSFS_BUS_SCSI &&
|
||||
+ !strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) ||
|
||||
+ pp->bus == SYSFS_BUS_NVME);
|
||||
+}
|
||||
+
|
||||
int
|
||||
get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
{
|
||||
@@ -1846,8 +1846,15 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
len = get_vpd_uid(pp);
|
||||
origin = "sysfs";
|
||||
}
|
||||
- if (len <= 0)
|
||||
- len = uid_fallback(pp, path_state, &origin, len);
|
||||
+ if (len <= 0 && has_uid_fallback(pp)) {
|
||||
+ int retrigger_tries;
|
||||
+
|
||||
+ conf = get_multipath_config();
|
||||
+ retrigger_tries = conf->retrigger_tries;
|
||||
+ put_multipath_config(conf);
|
||||
+ if (pp->retriggers >= retrigger_tries)
|
||||
+ len = uid_fallback(pp, path_state, &origin);
|
||||
+ }
|
||||
}
|
||||
if ( len < 0 ) {
|
||||
condlog(1, "%s: failed to get %s uid: %s",
|
||||
--
|
||||
2.17.2
|
||||
|
@ -0,0 +1,83 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Wed, 27 Mar 2019 23:27:47 -0500
|
||||
Subject: [PATCH] multipathd: handle changed wwids by removal and addition
|
||||
|
||||
If a path's WWID changes, it's not necessarily failed. But it certainly
|
||||
has to be removed from an existing map, otherwise data corruption is
|
||||
imminent. Instead of keeping the path in the map, failing it, and
|
||||
remembering the "changed WWID" state, this patch simply removes and
|
||||
re-adds the path.
|
||||
|
||||
This is patch is heavily based on the previous patch of the same name
|
||||
by Martin Wilck.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/main.c | 28 ++++++----------------------
|
||||
1 file changed, 6 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 7a317d9..b3571d9 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1191,7 +1191,6 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
int ro, retval = 0, rc;
|
||||
struct path * pp;
|
||||
struct config *conf;
|
||||
- int disable_changed_wwids;
|
||||
int needs_reinit = 0;
|
||||
|
||||
switch ((rc = change_foreign(uev->udev))) {
|
||||
@@ -1209,12 +1208,6 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
break;
|
||||
}
|
||||
|
||||
- conf = get_multipath_config();
|
||||
- disable_changed_wwids = conf->disable_changed_wwids;
|
||||
- put_multipath_config(conf);
|
||||
-
|
||||
- ro = uevent_get_disk_ro(uev);
|
||||
-
|
||||
pthread_cleanup_push(cleanup_lock, &vecs->lock);
|
||||
lock(&vecs->lock);
|
||||
pthread_testcancel();
|
||||
@@ -1239,22 +1232,12 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
if (rc != 0)
|
||||
strcpy(pp->wwid, wwid);
|
||||
else if (strncmp(wwid, pp->wwid, WWID_SIZE) != 0) {
|
||||
- condlog(0, "%s: path wwid changed from '%s' to '%s'. %s",
|
||||
- uev->kernel, wwid, pp->wwid,
|
||||
- (disable_changed_wwids ? "disallowing" :
|
||||
- "continuing"));
|
||||
- strcpy(pp->wwid, wwid);
|
||||
- if (disable_changed_wwids) {
|
||||
- if (!pp->wwid_changed) {
|
||||
- pp->wwid_changed = 1;
|
||||
- pp->tick = 1;
|
||||
- if (pp->mpp)
|
||||
- dm_fail_path(pp->mpp->alias, pp->dev_t);
|
||||
- }
|
||||
- goto out;
|
||||
- }
|
||||
+ condlog(0, "%s: path wwid changed from '%s' to '%s'",
|
||||
+ uev->kernel, wwid, pp->wwid);
|
||||
+ ev_remove_path(pp, vecs, 1);
|
||||
+ needs_reinit = 1;
|
||||
+ goto out;
|
||||
} else {
|
||||
- pp->wwid_changed = 0;
|
||||
udev_device_unref(pp->udev);
|
||||
pp->udev = udev_device_ref(uev->udev);
|
||||
conf = get_multipath_config();
|
||||
@@ -1265,6 +1248,7 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
pthread_cleanup_pop(1);
|
||||
}
|
||||
|
||||
+ ro = uevent_get_disk_ro(uev);
|
||||
if (mpp && ro >= 0) {
|
||||
condlog(2, "%s: update path write_protect to '%d' (uevent)", uev->kernel, ro);
|
||||
|
||||
--
|
||||
2.17.2
|
||||
|
46
0014-multipathd-remove-wwid_changed-path-attribute.patch
Normal file
46
0014-multipathd-remove-wwid_changed-path-attribute.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 18 Mar 2019 13:12:34 +0100
|
||||
Subject: [PATCH] multipathd: remove "wwid_changed" path attribute
|
||||
|
||||
This is now not needed any more.
|
||||
|
||||
Signed-off-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/structs.h | 1 -
|
||||
multipathd/main.c | 6 ------
|
||||
2 files changed, 7 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
|
||||
index b794b0d..7879d76 100644
|
||||
--- a/libmultipath/structs.h
|
||||
+++ b/libmultipath/structs.h
|
||||
@@ -280,7 +280,6 @@ struct path {
|
||||
int fd;
|
||||
int initialized;
|
||||
int retriggers;
|
||||
- int wwid_changed;
|
||||
unsigned int path_failures;
|
||||
time_t dis_reinstate_time;
|
||||
int disable_reinstate;
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index b3571d9..e4f95a0 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2001,12 +2001,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
|
||||
if (newstate == PATH_REMOVED)
|
||||
newstate = PATH_DOWN;
|
||||
|
||||
- if (pp->wwid_changed) {
|
||||
- condlog(2, "%s: path wwid has changed. Refusing to use",
|
||||
- pp->dev);
|
||||
- newstate = PATH_DOWN;
|
||||
- }
|
||||
-
|
||||
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED) {
|
||||
condlog(2, "%s: unusable path (%s) - checker failed",
|
||||
pp->dev, checker_state_name(newstate));
|
||||
--
|
||||
2.17.2
|
||||
|
98
0015-multipathd-ignore-disable_changed_wwids.patch
Normal file
98
0015-multipathd-ignore-disable_changed_wwids.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 18 Mar 2019 13:12:35 +0100
|
||||
Subject: [PATCH] multipathd: ignore "disable_changed_wwids"
|
||||
|
||||
This option has no effect any more.
|
||||
|
||||
Signed-off-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/config.c | 1 -
|
||||
libmultipath/config.h | 1 -
|
||||
libmultipath/dict.c | 18 +++++++++++++++---
|
||||
multipath/multipath.conf.5 | 8 ++------
|
||||
4 files changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||
index 24d71ae..141f092 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -715,7 +715,6 @@ load_config (char * file)
|
||||
conf->retrigger_tries = DEFAULT_RETRIGGER_TRIES;
|
||||
conf->retrigger_delay = DEFAULT_RETRIGGER_DELAY;
|
||||
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;
|
||||
conf->all_tg_pt = DEFAULT_ALL_TG_PT;
|
||||
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||
index b938c26..f5bf5b1 100644
|
||||
--- a/libmultipath/config.h
|
||||
+++ b/libmultipath/config.h
|
||||
@@ -182,7 +182,6 @@ struct config {
|
||||
int delayed_reconfig;
|
||||
int uev_wait_timeout;
|
||||
int skip_kpartx;
|
||||
- int disable_changed_wwids;
|
||||
int remove_retries;
|
||||
int max_sectors_kb;
|
||||
int ghost_delay;
|
||||
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
||||
index eaad4f1..96815f8 100644
|
||||
--- a/libmultipath/dict.c
|
||||
+++ b/libmultipath/dict.c
|
||||
@@ -156,6 +156,12 @@ out:
|
||||
return len;
|
||||
}
|
||||
|
||||
+static int
|
||||
+print_ignored (char *buff, int len)
|
||||
+{
|
||||
+ return snprintf(buff, len, "ignored");
|
||||
+}
|
||||
+
|
||||
static int
|
||||
print_yes_no (char *buff, int len, long v)
|
||||
{
|
||||
@@ -548,9 +554,15 @@ declare_hw_handler(skip_kpartx, set_yes_no_undef)
|
||||
declare_hw_snprint(skip_kpartx, print_yes_no_undef)
|
||||
declare_mp_handler(skip_kpartx, set_yes_no_undef)
|
||||
declare_mp_snprint(skip_kpartx, print_yes_no_undef)
|
||||
-
|
||||
-declare_def_handler(disable_changed_wwids, set_yes_no)
|
||||
-declare_def_snprint(disable_changed_wwids, print_yes_no)
|
||||
+static int def_disable_changed_wwids_handler(struct config *conf, vector strvec)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+static int snprint_def_disable_changed_wwids(struct config *conf, char *buff,
|
||||
+ int len, const void *data)
|
||||
+{
|
||||
+ return print_ignored(buff, len);
|
||||
+}
|
||||
|
||||
declare_def_handler(remove_retries, set_int)
|
||||
declare_def_snprint(remove_retries, print_int)
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 864d7eb..646c156 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1148,12 +1148,8 @@ The default is: \fBno\fR
|
||||
.
|
||||
.TP
|
||||
.B disable_changed_wwids
|
||||
-If set to \fIyes\fR, multipathd will check the path wwid on change events, and
|
||||
-if it has changed from the wwid of the multipath device, multipathd will
|
||||
-disable access to the path until the wwid changes back.
|
||||
-.RS
|
||||
-.TP
|
||||
-The default is: \fBno\fR
|
||||
+This option is deprecated and ignored. If the WWID of a path suddenly changes,
|
||||
+multipathd handles it as if it was removed and then added again.
|
||||
.RE
|
||||
.
|
||||
.
|
||||
--
|
||||
2.17.2
|
||||
|
135
0016-multipathd-Don-t-use-fallback-code-after-getting-wwi.patch
Normal file
135
0016-multipathd-Don-t-use-fallback-code-after-getting-wwi.patch
Normal file
@ -0,0 +1,135 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 28 Mar 2019 15:17:48 -0500
|
||||
Subject: [PATCH] multipathd: Don't use fallback code after getting wwid
|
||||
|
||||
The fallback code is necessary to set up mutipath devices, if multipath
|
||||
temporarily can't get the information from udev. However, once the
|
||||
devices are set up, udev is the definitive source of this information.
|
||||
|
||||
The wwid gotten from the fallback code and the udev code should always
|
||||
be the same, in which case it doesn't matter where we get the wwid
|
||||
from. But if they are different, it's important to try to do the
|
||||
right thing.
|
||||
|
||||
Working under the assumption that udev will either never give us this
|
||||
information, or that it usually will. multipath should assume that if
|
||||
there are multiple paths to a device, either they will all never get
|
||||
a wwid from udev, or some of them will likely already have gotten the
|
||||
correct wwid from udev. In this case, we should fix this as soon as
|
||||
possible.
|
||||
|
||||
This does mean that devices where udev will never give out the uuid
|
||||
will not notice if the wwid changes, but that's a small price to pay
|
||||
for doing the right thing most of the time.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 22 +++++++++-------------
|
||||
libmultipath/discovery.h | 3 ++-
|
||||
multipathd/main.c | 2 +-
|
||||
3 files changed, 12 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index 3ec60d6..744cf2c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1763,7 +1763,6 @@ static ssize_t uid_fallback(struct path *pp, int path_state,
|
||||
!strcmp(pp->uid_attribute, DEFAULT_UID_ATTRIBUTE)) {
|
||||
len = get_vpd_uid(pp);
|
||||
*origin = "sysfs";
|
||||
- pp->uid_attribute = NULL;
|
||||
if (len < 0 && path_state == PATH_UP) {
|
||||
condlog(1, "%s: failed to get sysfs uid: %s",
|
||||
pp->dev, strerror(-len));
|
||||
@@ -1787,7 +1786,6 @@ static ssize_t uid_fallback(struct path *pp, int path_state,
|
||||
len = WWID_SIZE;
|
||||
}
|
||||
*origin = "sysfs";
|
||||
- pp->uid_attribute = NULL;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
@@ -1800,12 +1798,14 @@ static int has_uid_fallback(struct path *pp)
|
||||
}
|
||||
|
||||
int
|
||||
-get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
+get_uid (struct path * pp, int path_state, struct udev_device *udev,
|
||||
+ int allow_fallback)
|
||||
{
|
||||
char *c;
|
||||
const char *origin = "unknown";
|
||||
ssize_t len = 0;
|
||||
struct config *conf;
|
||||
+ int used_fallback = 0;
|
||||
|
||||
if (!pp->uid_attribute && !pp->getuid) {
|
||||
conf = get_multipath_config();
|
||||
@@ -1846,14 +1846,9 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
len = get_vpd_uid(pp);
|
||||
origin = "sysfs";
|
||||
}
|
||||
- if (len <= 0 && has_uid_fallback(pp)) {
|
||||
- int retrigger_tries;
|
||||
-
|
||||
- conf = get_multipath_config();
|
||||
- retrigger_tries = conf->retrigger_tries;
|
||||
- put_multipath_config(conf);
|
||||
- if (pp->retriggers >= retrigger_tries)
|
||||
- len = uid_fallback(pp, path_state, &origin);
|
||||
+ if (len <= 0 && allow_fallback && has_uid_fallback(pp)) {
|
||||
+ used_fallback = 1;
|
||||
+ len = uid_fallback(pp, path_state, &origin);
|
||||
}
|
||||
}
|
||||
if ( len < 0 ) {
|
||||
@@ -1870,7 +1865,7 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
|
||||
c--;
|
||||
}
|
||||
}
|
||||
- condlog(3, "%s: uid = %s (%s)", pp->dev,
|
||||
+ condlog((used_fallback)? 1 : 3, "%s: uid = %s (%s)", pp->dev,
|
||||
*pp->wwid == '\0' ? "<empty>" : pp->wwid, origin);
|
||||
return 0;
|
||||
}
|
||||
@@ -1994,7 +1989,8 @@ int pathinfo(struct path *pp, struct config *conf, int mask)
|
||||
}
|
||||
|
||||
if ((mask & DI_WWID) && !strlen(pp->wwid)) {
|
||||
- get_uid(pp, path_state, pp->udev);
|
||||
+ get_uid(pp, path_state, pp->udev,
|
||||
+ (pp->retriggers >= conf->retrigger_tries));
|
||||
if (!strlen(pp->wwid)) {
|
||||
if (pp->bus == SYSFS_BUS_UNDEF)
|
||||
return PATHINFO_SKIPPED;
|
||||
diff --git a/libmultipath/discovery.h b/libmultipath/discovery.h
|
||||
index 9aacf75..8fd126b 100644
|
||||
--- a/libmultipath/discovery.h
|
||||
+++ b/libmultipath/discovery.h
|
||||
@@ -52,7 +52,8 @@ ssize_t sysfs_get_vpd (struct udev_device * udev, int pg, unsigned char * buff,
|
||||
size_t len);
|
||||
int sysfs_get_asymmetric_access_state(struct path *pp,
|
||||
char *buff, int buflen);
|
||||
-int get_uid(struct path * pp, int path_state, struct udev_device *udev);
|
||||
+int get_uid(struct path * pp, int path_state, struct udev_device *udev,
|
||||
+ int allow_fallback);
|
||||
|
||||
/*
|
||||
* discovery bitmask
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index e4f95a0..1413c6d 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1227,7 +1227,7 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
goto out;
|
||||
|
||||
strcpy(wwid, pp->wwid);
|
||||
- rc = get_uid(pp, pp->state, uev->udev);
|
||||
+ rc = get_uid(pp, pp->state, uev->udev, 0);
|
||||
|
||||
if (rc != 0)
|
||||
strcpy(pp->wwid, wwid);
|
||||
--
|
||||
2.17.2
|
||||
|
31
0017-libmultipath-silence-dm_is_mpath-error-messages.patch
Normal file
31
0017-libmultipath-silence-dm_is_mpath-error-messages.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 28 Mar 2019 17:49:38 -0500
|
||||
Subject: [PATCH] libmultipath: silence dm_is_mpath error messages
|
||||
|
||||
When "multipath -F" is run, dm_is_mpath was printing error messages
|
||||
about partition devices, because they had already been removed, when
|
||||
it checked. Lower the error logging level so this doesn't happen on
|
||||
the default verbosity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/devmapper.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||
index 3294bd4..2e79667 100644
|
||||
--- a/libmultipath/devmapper.c
|
||||
+++ b/libmultipath/devmapper.c
|
||||
@@ -746,7 +746,7 @@ out_task:
|
||||
dm_task_destroy(dmt);
|
||||
out:
|
||||
if (r < 0)
|
||||
- condlog(2, "%s: dm command failed in %s", name, __FUNCTION__);
|
||||
+ condlog(3, "%s: dm command failed in %s: %s", name, __FUNCTION__, strerror(errno));
|
||||
return r;
|
||||
}
|
||||
|
||||
--
|
||||
2.17.2
|
||||
|
@ -49,10 +49,10 @@ index e0d0279..556c0b9 100644
|
||||
udev_device_get_properties_list_entry(udev)) {
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 0fe8461..ad653a8 100644
|
||||
index 646c156..768ab83 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1239,16 +1239,14 @@ keywords. Both are regular expressions. For a full description of these keywords
|
||||
@@ -1235,16 +1235,14 @@ keywords. Both are regular expressions. For a full description of these keywords
|
||||
Regular expression for an udev property. All
|
||||
devices that have matching udev properties will be excluded/included.
|
||||
The handling of the \fIproperty\fR keyword is special,
|
@ -20,7 +20,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
5 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||
index 24d71ae..9b6d71e 100644
|
||||
index 141f092..544d2fb 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -26,6 +26,7 @@
|
||||
@ -31,7 +31,7 @@ index 24d71ae..9b6d71e 100644
|
||||
|
||||
static int
|
||||
hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2)
|
||||
@@ -746,6 +747,20 @@ load_config (char * file)
|
||||
@@ -745,6 +746,20 @@ load_config (char * file)
|
||||
goto out;
|
||||
}
|
||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
|
||||
@ -53,7 +53,7 @@ index 24d71ae..9b6d71e 100644
|
||||
|
||||
conf->processed_main_config = 1;
|
||||
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
||||
index b938c26..a871a95 100644
|
||||
index f5bf5b1..8803967 100644
|
||||
--- a/libmultipath/config.h
|
||||
+++ b/libmultipath/config.h
|
||||
@@ -9,6 +9,7 @@
|
@ -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 9b6d71e..be40bbf 100644
|
||||
index 544d2fb..deb80c2 100644
|
||||
--- a/libmultipath/config.c
|
||||
+++ b/libmultipath/config.c
|
||||
@@ -749,6 +749,8 @@ load_config (char * file)
|
||||
@@ -748,6 +748,8 @@ load_config (char * file)
|
||||
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
|
||||
} else {
|
||||
condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
|
@ -86,7 +86,7 @@ index 0c6ee54..e32a0b0 100644
|
||||
enum {
|
||||
WWID_IS_NOT_FAILED = 0,
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 5abb118..1481e7f 100644
|
||||
index 69141db..e7771c0 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -133,7 +133,7 @@ usage (char * progname)
|
@ -16,7 +16,7 @@ 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 eaad4f1..95ae09b 100644
|
||||
index 96815f8..3b1b652 100644
|
||||
--- a/libmultipath/dict.c
|
||||
+++ b/libmultipath/dict.c
|
||||
@@ -58,6 +58,21 @@ set_str(vector strvec, void *ptr)
|
||||
@ -41,7 +41,7 @@ index eaad4f1..95ae09b 100644
|
||||
static int
|
||||
set_yes_no(vector strvec, void *ptr)
|
||||
{
|
||||
@@ -1374,7 +1389,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \
|
||||
@@ -1386,7 +1401,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \
|
||||
if (!conf->option) \
|
||||
return 1; \
|
||||
\
|
||||
@ -50,7 +50,7 @@ index eaad4f1..95ae09b 100644
|
||||
if (!buff) \
|
||||
return 1; \
|
||||
\
|
||||
@@ -1390,7 +1405,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
|
||||
@@ -1402,7 +1417,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
|
||||
if (!conf->option) \
|
||||
return 1; \
|
||||
\
|
||||
@ -59,7 +59,7 @@ index eaad4f1..95ae09b 100644
|
||||
if (!buff) \
|
||||
return 1; \
|
||||
\
|
||||
@@ -1493,16 +1508,16 @@ device_handler(struct config *conf, vector strvec)
|
||||
@@ -1505,16 +1520,16 @@ device_handler(struct config *conf, vector strvec)
|
||||
return 0;
|
||||
}
|
||||
|
27
0027-Fix-systemd-version-detection.patch
Normal file
27
0027-Fix-systemd-version-detection.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
||||
Date: Tue, 26 Mar 2019 16:34:32 -0500
|
||||
Subject: [PATCH] Fix systemd version detection
|
||||
|
||||
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index b98800a..da49852 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -37,7 +37,7 @@ endif
|
||||
|
||||
ifndef SYSTEMD
|
||||
ifeq ($(shell systemctl --version > /dev/null 2>&1 && echo 1), 1)
|
||||
- SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\)/\1/p')
|
||||
+ SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p')
|
||||
endif
|
||||
endif
|
||||
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -uNr multipath-tools-2df6110.orig/Makefile.inc multipath-tools-2df6110/Makefile.inc
|
||||
--- multipath-tools-2df6110.orig/Makefile.inc 2019-02-18 00:03:30.709950703 +0100
|
||||
+++ multipath-tools-2df6110/Makefile.inc 2019-02-18 00:07:53.603837498 +0100
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
ifndef SYSTEMD
|
||||
ifeq ($(shell systemctl --version > /dev/null 2>&1 && echo 1), 1)
|
||||
- SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\)/\1/p')
|
||||
+ SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p')
|
||||
endif
|
||||
endif
|
||||
|
@ -1,6 +1,6 @@
|
||||
Name: device-mapper-multipath
|
||||
Version: 0.7.9
|
||||
Release: 6.git2df6110%{?dist}
|
||||
Version: 0.8.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Tools to manage multipath devices using device-mapper
|
||||
License: GPLv2
|
||||
URL: http://christophe.varoqui.free.fr/
|
||||
@ -8,26 +8,35 @@ 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=17a6101;sf=tgz" -o multipath-tools-17a6101.tgz
|
||||
Source0: multipath-tools-2df6110.tgz
|
||||
Source0: multipath-tools-0.8.0.tgz
|
||||
Source1: multipath.conf
|
||||
Patch0001: 0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch
|
||||
Patch0002: 0002-libmultipath-handle-existing-paths-in-marginal_path-.patch
|
||||
Patch0003: 0003-multipathd-cleanup-marginal-paths-checking-timers.patch
|
||||
Patch0004: 0004-libmultipath-fix-marginal-paths-queueing-errors.patch
|
||||
Patch0005: 0005-libmultipath-fix-marginal_paths-nr_active-check.patch
|
||||
Patch0006: 0006-multipathd-avoid-null-pointer-dereference-in-LOG_MSG.patch
|
||||
Patch0007: 0007-multipath-blacklist-zram-devices.patch
|
||||
Patch0008: 0008-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0009: 0009-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0010: 0010-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0011: 0011-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0012: 0012-RH-add-mpathconf.patch
|
||||
Patch0013: 0013-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0014: 0014-RH-warn-on-invalid-regex-instead-of-failing.patch
|
||||
Patch0015: 0015-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0016: 0016-RH-Fix-nvme-compilation-warning.patch
|
||||
|
||||
Patch100: device-mapper-multipath-fix-systemd-detection.diff
|
||||
Patch0006: 0006-multipathd-Fix-miscounting-active-paths.patch
|
||||
Patch0007: 0007-multipathd-ignore-failed-wwid-recheck.patch
|
||||
Patch0008: 0008-libmutipath-continue-to-use-old-state-on-PATH_PENDIN.patch
|
||||
Patch0009: 0009-multipathd-use-update_path_groups-instead-of-reload_.patch
|
||||
Patch0010: 0010-multipath.conf-add-missing-options-to-man-page.patch
|
||||
Patch0011: 0011-libmultipath-add-get_uid-fallback-code-for-NVMe-devi.patch
|
||||
Patch0012: 0012-libmulitpath-cleanup-uid_fallback-code.patch
|
||||
Patch0013: 0013-multipathd-handle-changed-wwids-by-removal-and-addit.patch
|
||||
Patch0014: 0014-multipathd-remove-wwid_changed-path-attribute.patch
|
||||
Patch0015: 0015-multipathd-ignore-disable_changed_wwids.patch
|
||||
Patch0016: 0016-multipathd-Don-t-use-fallback-code-after-getting-wwi.patch
|
||||
Patch0017: 0017-libmultipath-silence-dm_is_mpath-error-messages.patch
|
||||
Patch0018: 0018-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0019: 0019-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0020: 0020-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0021: 0021-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0022: 0022-RH-add-mpathconf.patch
|
||||
Patch0023: 0023-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0024: 0024-RH-warn-on-invalid-regex-instead-of-failing.patch
|
||||
Patch0025: 0025-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0026: 0026-RH-Fix-nvme-compilation-warning.patch
|
||||
Patch0027: 0027-Fix-systemd-version-detection.patch
|
||||
|
||||
# runtime
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
@ -110,7 +119,7 @@ This package contains the files needed to develop applications that use
|
||||
device-mapper-multipath's libdmmp C API library
|
||||
|
||||
%prep
|
||||
%autosetup -n multipath-tools-2df6110 -p1
|
||||
%autosetup -n multipath-tools-0.8.0 -p1
|
||||
cp %{SOURCE1} .
|
||||
|
||||
%build
|
||||
@ -222,6 +231,29 @@ fi
|
||||
%{_pkgconfdir}/libdmmp.pc
|
||||
|
||||
%changelog
|
||||
* Thu Apr 4 2019 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.0-1
|
||||
- Update Source to upstream version 0.8.0
|
||||
* Previous patches 0006 & 0007 are included in this commit
|
||||
- Rename files
|
||||
* Previous patches 0008-0016 & 0100 are now patches 0018-0027
|
||||
- Add 0006-multipathd-Fix-miscounting-active-paths.patch
|
||||
- Add 0007-multipathd-ignore-failed-wwid-recheck.patch
|
||||
* multipathd will no longer disable paths if it is unable to
|
||||
get their wwid on a change event
|
||||
- Add 0008-libmutipath-continue-to-use-old-state-on-PATH_PENDIN.patch
|
||||
- Add 0009-multipathd-use-update_path_groups-instead-of-reload_.patch
|
||||
- Add 0010-multipath.conf-add-missing-options-to-man-page.patch
|
||||
- Add 0011-libmultipath-add-get_uid-fallback-code-for-NVMe-devi.patch
|
||||
- Add 0012-libmulitpath-cleanup-uid_fallback-code.patch
|
||||
- Add 0013-multipathd-handle-changed-wwids-by-removal-and-addit.patch
|
||||
* if a path device changes wwid, it will now be removed and re-added
|
||||
to the correct multipath device.
|
||||
- Add 0014-multipathd-remove-wwid_changed-path-attribute.patch
|
||||
- Add 0015-multipathd-ignore-disable_changed_wwids.patch
|
||||
- Add 0016-multipathd-Don-t-use-fallback-code-after-getting-wwi.patch
|
||||
- Add 0017-libmultipath-silence-dm_is_mpath-error-messages.patch
|
||||
* The above 12 patches have been submitted upstream
|
||||
|
||||
* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.7.9-6.git2df6110
|
||||
- Rebuild for readline 8.0
|
||||
|
||||
|
2
sources
2
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (multipath-tools-2df6110.tgz) = 5083e95157d2a978c8f5ed234b9c0fa4eced7bce7d4f28d82479b4fc504fc74b4f00ec78ec0a830a44df01de76a40d33af41bedb0731be2afaccfda1fb9e7d0b
|
||||
SHA512 (multipath-tools-0.8.0.tgz) = e2ed6936f76da8b703babea22b6b02be19abea3ba55105a13596f306e483c453d105316c2416027be3524e49834ea27ff745963e86e933ffe4c9ee729a2371ba
|
||||
SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942
|
||||
|
Loading…
Reference in New Issue
Block a user