device-mapper-multipath-0.8.6-2
Pull in latest upstream post-tag commits * Patches 0001-0015 are from https://github.com/openSUSE/multipath-tools/tree/queue and are already queued for upstream Rename files * Previous patches 0001-0010 and now patches 0016-0025
This commit is contained in:
parent
db52ccc87f
commit
c64a48b95f
@ -0,0 +1,32 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: lixiaokeng <lixiaokeng@huawei.com>
|
||||
Date: Fri, 9 Apr 2021 15:15:05 +0800
|
||||
Subject: [PATCH] libmultipath: fix memory leak in checker_cleanup_thread
|
||||
|
||||
If checker_cleanup_thread is called after cleanup_checkers,
|
||||
the checker_class will not be freed.
|
||||
|
||||
Here, we use free_checker_class instead of checker_class_unref
|
||||
in checker_cleanup_thread.
|
||||
|
||||
Signed-off-by: Lixiaokeng <lixiaokeng@huawei.com>
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/checkers.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
|
||||
index 2dd9915d..8039c2bf 100644
|
||||
--- a/libmultipath/checkers.c
|
||||
+++ b/libmultipath/checkers.c
|
||||
@@ -368,7 +368,7 @@ static void checker_cleanup_thread(void *arg)
|
||||
{
|
||||
struct checker_class *cls = arg;
|
||||
|
||||
- (void)checker_class_unref(cls);
|
||||
+ free_checker_class(cls);
|
||||
rcu_unregister_thread();
|
||||
}
|
||||
|
85
0002-multipathd-fix-compilation-issue-with-liburcu-0.8.patch
Normal file
85
0002-multipathd-fix-compilation-issue-with-liburcu-0.8.patch
Normal file
@ -0,0 +1,85 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Wed, 12 May 2021 23:06:51 +0200
|
||||
Subject: [PATCH] multipathd: fix compilation issue with liburcu < 0.8
|
||||
|
||||
To avoid race conditions with pending RCU callbacks on exit, it's
|
||||
necessary to call rcu_barrier() in cleanup_rcu() (see
|
||||
https://lists.lttng.org/pipermail/lttng-dev/2021-May/029958.html and
|
||||
follow-ups).
|
||||
|
||||
rcu_barrier() is only available in User-space RCU v0.8 and newer.
|
||||
Fix it by reverting 5d0dae6 ("multipathd: Fix liburcu memory leak")
|
||||
if an older version of liburcu is detected.
|
||||
|
||||
Fixes: 5d0dae6 ("multipathd: Fix liburcu memory leak")
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/Makefile | 2 ++
|
||||
multipathd/main.c | 17 +++++++++++++++--
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/multipathd/Makefile b/multipathd/Makefile
|
||||
index d053c1ed..393b6cbb 100644
|
||||
--- a/multipathd/Makefile
|
||||
+++ b/multipathd/Makefile
|
||||
@@ -16,6 +16,8 @@ LDFLAGS += $(BIN_LDFLAGS)
|
||||
LIBDEPS += -L$(multipathdir) -lmultipath -L$(mpathpersistdir) -lmpathpersist \
|
||||
-L$(mpathcmddir) -lmpathcmd -ludev -ldl -lurcu -lpthread \
|
||||
-ldevmapper -lreadline
|
||||
+CFLAGS += $(shell $(PKGCONFIG) --modversion liburcu 2>/dev/null | \
|
||||
+ awk -F. '{ printf("-DURCU_VERSION=0x%06x", 256 * ( 256 * $$1 + $$2) + $$3); }')
|
||||
|
||||
ifdef SYSTEMD
|
||||
CFLAGS += -DUSE_SYSTEMD=$(SYSTEMD)
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 102946bf..c34fd9c8 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -3031,6 +3031,10 @@ static void cleanup_threads(void)
|
||||
pthread_attr_destroy(&waiter_attr);
|
||||
}
|
||||
|
||||
+#ifndef URCU_VERSION
|
||||
+# define URCU_VERSION 0
|
||||
+#endif
|
||||
+#if (URCU_VERSION >= 0x000800)
|
||||
/*
|
||||
* Use a non-default call_rcu_data for child().
|
||||
*
|
||||
@@ -3040,6 +3044,9 @@ static void cleanup_threads(void)
|
||||
* can't be joined with pthread_join(), leaving a memory leak.
|
||||
*
|
||||
* Therefore we create our own, which can be destroyed and joined.
|
||||
+ * The cleanup handler needs to call rcu_barrier(), which is only
|
||||
+ * available in user-space RCU v0.8 and newer. See
|
||||
+ * https://lists.lttng.org/pipermail/lttng-dev/2021-May/029958.html
|
||||
*/
|
||||
static struct call_rcu_data *setup_rcu(void)
|
||||
{
|
||||
@@ -3072,6 +3079,7 @@ static void cleanup_rcu(void)
|
||||
}
|
||||
rcu_unregister_thread();
|
||||
}
|
||||
+#endif /* URCU_VERSION */
|
||||
|
||||
static void cleanup_child(void)
|
||||
{
|
||||
@@ -3116,9 +3124,14 @@ child (__attribute__((unused)) void *param)
|
||||
init_unwinder();
|
||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||
signal_init();
|
||||
+#if (URCU_VERSION >= 0x000800)
|
||||
mp_rcu_data = setup_rcu();
|
||||
-
|
||||
- if (atexit(cleanup_rcu) || atexit(cleanup_child))
|
||||
+ if (atexit(cleanup_rcu))
|
||||
+ fprintf(stderr, "failed to register RCU cleanup handler\n");
|
||||
+#else
|
||||
+ rcu_init();
|
||||
+#endif
|
||||
+ if (atexit(cleanup_child))
|
||||
fprintf(stderr, "failed to register cleanup handlers\n");
|
||||
|
||||
setup_thread_attr(&misc_attr, 64 * 1024, 0);
|
@ -0,0 +1,70 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:54 -0500
|
||||
Subject: [PATCH] multipathd: don't fail to remove path once the map is removed
|
||||
|
||||
In ev_remove_path(), if update_mpp_paths() fails, we delete the entire
|
||||
map. However, since update_mpp_paths() happens before we call
|
||||
set_path_removed(), pp->initialized isn't set to INIT_REMOVED, so
|
||||
remove_map_and_stop_waiter() doesn't remove the path when in removes the
|
||||
map. But with the map removed, there's nothing to keep us from removing
|
||||
the path.
|
||||
|
||||
Call set_path_removed() before update_mpp_paths() to avoid the odd case
|
||||
of ev_remove_path() removing the map but not the path.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
libmultipath/structs_vec.c | 4 ++--
|
||||
multipathd/main.c | 13 ++++++++-----
|
||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
|
||||
index d242c06b..75390198 100644
|
||||
--- a/libmultipath/structs_vec.c
|
||||
+++ b/libmultipath/structs_vec.c
|
||||
@@ -45,8 +45,8 @@ int update_mpp_paths(struct multipath *mpp, vector pathvec)
|
||||
|
||||
/*
|
||||
* Avoid adding removed paths to the map again
|
||||
- * when we reload it. Such paths may exist if
|
||||
- * domap fails in ev_remove_path().
|
||||
+ * when we reload it. Such paths may exist in
|
||||
+ * ev_remove_paths() or if it returns failure.
|
||||
*/
|
||||
pp1 = find_path_by_devt(pathvec, pp->dev_t);
|
||||
if (pp1 && pp->initialized != INIT_REMOVED &&
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index c34fd9c8..2062bc10 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1199,6 +1199,13 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
* avoid referring to the map of an orphaned path
|
||||
*/
|
||||
if ((mpp = pp->mpp)) {
|
||||
+ /*
|
||||
+ * Mark the path as removed. In case of success, we
|
||||
+ * will delete it for good. Otherwise, it will be deleted
|
||||
+ * later, unless all attempts to reload this map fail.
|
||||
+ */
|
||||
+ set_path_removed(pp);
|
||||
+
|
||||
/*
|
||||
* transform the mp->pg vector of vectors of paths
|
||||
* into a mp->params string to feed the device-mapper
|
||||
@@ -1210,13 +1217,9 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Mark the path as removed. In case of success, we
|
||||
- * will delete it for good. Otherwise, it will be deleted
|
||||
- * later, unless all attempts to reload this map fail.
|
||||
- * Note: we have to explicitly remove pp from mpp->paths,
|
||||
+ * we have to explicitly remove pp from mpp->paths,
|
||||
* update_mpp_paths() doesn't do that.
|
||||
*/
|
||||
- set_path_removed(pp);
|
||||
i = find_slot(mpp->paths, pp);
|
||||
if (i != -1)
|
||||
vector_del_slot(mpp->paths, i);
|
@ -0,0 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:55 -0500
|
||||
Subject: [PATCH] multipathd: remove duplicate orphan_paths in flush_map
|
||||
|
||||
remove_map_and_stop_waiter() already calls orphan_paths() so flush_map()
|
||||
doesn't need to call orphan_paths() before calling
|
||||
remove_map_and_stop_waiter().
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/main.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 2062bc10..266d6b44 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -660,7 +660,6 @@ flush_map(struct multipath * mpp, struct vectors * vecs, int nopaths)
|
||||
else
|
||||
condlog(2, "%s: map flushed", mpp->alias);
|
||||
|
||||
- orphan_paths(vecs->pathvec, mpp, "map flushed");
|
||||
remove_map_and_stop_waiter(mpp, vecs);
|
||||
|
||||
return 0;
|
226
0005-multipathd-fix-ev_remove_path-return-code-handling.patch
Normal file
226
0005-multipathd-fix-ev_remove_path-return-code-handling.patch
Normal file
@ -0,0 +1,226 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:56 -0500
|
||||
Subject: [PATCH] multipathd: fix ev_remove_path return code handling
|
||||
|
||||
When ev_remove_path() returned success, callers assumed that the path
|
||||
(and possibly the map) had been removed. When ev_remove_path() returned
|
||||
failure, callers assumed that the path had not been removed. However,
|
||||
the path could be removed on both success or failure. This could cause
|
||||
callers to dereference the path after it was removed.
|
||||
|
||||
To deal with this, make ev_remove_path() return a different symbolic
|
||||
value for each outcome, and make the callers react appropriately for
|
||||
the different values. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 24 +++++++++++++++++++++--
|
||||
multipathd/main.c | 41 ++++++++++++++++++++-------------------
|
||||
multipathd/main.h | 14 +++++++++++++
|
||||
3 files changed, 57 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 1de6ad8e..6765fcf0 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -752,7 +752,8 @@ cli_add_path (void * v, char ** reply, int * len, void * data)
|
||||
/* Have the checker reinstate this path asap */
|
||||
pp->tick = 1;
|
||||
return 0;
|
||||
- } else if (!ev_remove_path(pp, vecs, true))
|
||||
+ } else if (ev_remove_path(pp, vecs, true) &
|
||||
+ REMOVE_PATH_SUCCESS)
|
||||
/* Path removed in ev_remove_path() */
|
||||
pp = NULL;
|
||||
else {
|
||||
@@ -813,6 +814,7 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
struct vectors * vecs = (struct vectors *)data;
|
||||
char * param = get_keyparam(v, PATH);
|
||||
struct path *pp;
|
||||
+ int ret;
|
||||
|
||||
param = convert_dev(param, 1);
|
||||
condlog(2, "%s: remove path (operator)", param);
|
||||
@@ -821,7 +823,25 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
condlog(0, "%s: path already removed", param);
|
||||
return 1;
|
||||
}
|
||||
- return ev_remove_path(pp, vecs, 1);
|
||||
+ ret = ev_remove_path(pp, vecs, 1);
|
||||
+ if (ret == REMOVE_PATH_DELAY) {
|
||||
+ *reply = strdup("delayed\n");
|
||||
+ if (*reply)
|
||||
+ *len = strlen(*reply) + 1;
|
||||
+ else {
|
||||
+ *len = 0;
|
||||
+ ret = REMOVE_PATH_FAILURE;
|
||||
+ }
|
||||
+ } else if (ret == REMOVE_PATH_MAP_ERROR) {
|
||||
+ *reply = strdup("map reload error. removed\n");
|
||||
+ if (*reply)
|
||||
+ *len = strlen(*reply) + 1;
|
||||
+ else {
|
||||
+ *len = 0;
|
||||
+ ret = REMOVE_PATH_FAILURE;
|
||||
+ }
|
||||
+ }
|
||||
+ return (ret == REMOVE_PATH_FAILURE);
|
||||
}
|
||||
|
||||
int
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 266d6b44..26a4e44e 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -838,7 +838,7 @@ handle_path_wwid_change(struct path *pp, struct vectors *vecs)
|
||||
return;
|
||||
|
||||
udd = udev_device_ref(pp->udev);
|
||||
- if (ev_remove_path(pp, vecs, 1) != 0 && pp->mpp) {
|
||||
+ if (!(ev_remove_path(pp, vecs, 1) & REMOVE_PATH_SUCCESS) && pp->mpp) {
|
||||
pp->dmstate = PSTATE_FAILED;
|
||||
dm_fail_path(pp->mpp->alias, pp->dev_t);
|
||||
}
|
||||
@@ -948,8 +948,8 @@ uev_add_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
* Make another attempt to remove the path
|
||||
*/
|
||||
pp->mpp = prev_mpp;
|
||||
- ret = ev_remove_path(pp, vecs, true);
|
||||
- if (ret != 0) {
|
||||
+ if (!(ev_remove_path(pp, vecs, true) &
|
||||
+ REMOVE_PATH_SUCCESS)) {
|
||||
/*
|
||||
* Failure in ev_remove_path will keep
|
||||
* path in pathvec in INIT_REMOVED state
|
||||
@@ -960,6 +960,7 @@ uev_add_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
dm_fail_path(pp->mpp->alias, pp->dev_t);
|
||||
condlog(1, "%s: failed to re-add path still mapped in %s",
|
||||
pp->dev, pp->mpp->alias);
|
||||
+ ret = 1;
|
||||
} else if (r == PATHINFO_OK)
|
||||
/*
|
||||
* Path successfully freed, move on to
|
||||
@@ -1167,7 +1168,6 @@ static int
|
||||
uev_remove_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
{
|
||||
struct path *pp;
|
||||
- int ret;
|
||||
|
||||
condlog(3, "%s: remove path (uevent)", uev->kernel);
|
||||
delete_foreign(uev->udev);
|
||||
@@ -1177,21 +1177,18 @@ uev_remove_path (struct uevent *uev, struct vectors * vecs, int need_do_map)
|
||||
pthread_testcancel();
|
||||
pp = find_path_by_dev(vecs->pathvec, uev->kernel);
|
||||
if (pp)
|
||||
- ret = ev_remove_path(pp, vecs, need_do_map);
|
||||
+ ev_remove_path(pp, vecs, need_do_map);
|
||||
lock_cleanup_pop(vecs->lock);
|
||||
- if (!pp) {
|
||||
- /* Not an error; path might have been purged earlier */
|
||||
+ if (!pp) /* Not an error; path might have been purged earlier */
|
||||
condlog(0, "%s: path already removed", uev->kernel);
|
||||
- return 0;
|
||||
- }
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
{
|
||||
struct multipath * mpp;
|
||||
- int i, retval = 0;
|
||||
+ int i, retval = REMOVE_PATH_SUCCESS;
|
||||
char params[PARAMS_SIZE] = {0};
|
||||
|
||||
/*
|
||||
@@ -1245,7 +1242,6 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
condlog(2, "%s: removed map after"
|
||||
" removing all paths",
|
||||
alias);
|
||||
- retval = 0;
|
||||
/* flush_map() has freed the path */
|
||||
goto out;
|
||||
}
|
||||
@@ -1262,11 +1258,14 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
|
||||
if (mpp->wait_for_udev) {
|
||||
mpp->wait_for_udev = 2;
|
||||
+ retval = REMOVE_PATH_DELAY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if (!need_do_map)
|
||||
+ if (!need_do_map) {
|
||||
+ retval = REMOVE_PATH_DELAY;
|
||||
goto out;
|
||||
+ }
|
||||
/*
|
||||
* reload the map
|
||||
*/
|
||||
@@ -1275,7 +1274,7 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
condlog(0, "%s: failed in domap for "
|
||||
"removal of path %s",
|
||||
mpp->alias, pp->dev);
|
||||
- retval = 1;
|
||||
+ retval = REMOVE_PATH_FAILURE;
|
||||
} else {
|
||||
/*
|
||||
* update our state from kernel
|
||||
@@ -1283,12 +1282,12 @@ ev_remove_path (struct path *pp, struct vectors * vecs, int need_do_map)
|
||||
char devt[BLK_DEV_SIZE];
|
||||
|
||||
strlcpy(devt, pp->dev_t, sizeof(devt));
|
||||
+
|
||||
+ /* setup_multipath will free the path
|
||||
+ * regardless of whether it succeeds or
|
||||
+ * fails */
|
||||
if (setup_multipath(vecs, mpp))
|
||||
- return 1;
|
||||
- /*
|
||||
- * Successful map reload without this path:
|
||||
- * sync_map_state() will free it.
|
||||
- */
|
||||
+ return REMOVE_PATH_MAP_ERROR;
|
||||
sync_map_state(mpp);
|
||||
|
||||
condlog(2, "%s: path removed from map %s",
|
||||
@@ -1304,8 +1303,10 @@ out:
|
||||
return retval;
|
||||
|
||||
fail:
|
||||
+ condlog(0, "%s: error removing path. removing map %s", pp->dev,
|
||||
+ mpp->alias);
|
||||
remove_map_and_stop_waiter(mpp, vecs);
|
||||
- return 1;
|
||||
+ return REMOVE_PATH_MAP_ERROR;
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/multipathd/main.h b/multipathd/main.h
|
||||
index ddd953f9..bc1f938f 100644
|
||||
--- a/multipathd/main.h
|
||||
+++ b/multipathd/main.h
|
||||
@@ -13,6 +13,20 @@ enum daemon_status {
|
||||
DAEMON_STATUS_SIZE,
|
||||
};
|
||||
|
||||
+enum remove_path_result {
|
||||
+ REMOVE_PATH_FAILURE = 0x0, /* path could not be removed. It is still
|
||||
+ * part of the kernel map, but its state
|
||||
+ * is set to INIT_REMOVED, and it will be
|
||||
+ * removed at the next possible occassion */
|
||||
+ REMOVE_PATH_SUCCESS = 0x1, /* path was removed */
|
||||
+ REMOVE_PATH_DELAY = 0x2, /* path is set to be removed later. it
|
||||
+ * currently still exists and is part of the
|
||||
+ * kernel map */
|
||||
+ REMOVE_PATH_MAP_ERROR = 0x5, /* map was removed because of error. value
|
||||
+ * includes REMOVE_PATH_SUCCESS bit
|
||||
+ * because the path was also removed */
|
||||
+};
|
||||
+
|
||||
struct prout_param_descriptor;
|
||||
struct prin_resp;
|
||||
|
47
0006-multipath-free-vectors-in-configure.patch
Normal file
47
0006-multipath-free-vectors-in-configure.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:57 -0500
|
||||
Subject: [PATCH] multipath: free vectors in configure
|
||||
|
||||
configure() can retry multiple times, each time reallocing a maps and
|
||||
paths vector, and leaking the previous ones. Fix this by always freeing
|
||||
the vectors before configure() exits. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipath/main.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index ef89c7cf..8fc0e15f 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -466,7 +466,6 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
||||
*/
|
||||
curmp = vector_alloc();
|
||||
pathvec = vector_alloc();
|
||||
- atexit(cleanup_vecs);
|
||||
|
||||
if (!curmp || !pathvec) {
|
||||
condlog(0, "can not allocate memory");
|
||||
@@ -578,6 +577,11 @@ out:
|
||||
if (refwwid)
|
||||
FREE(refwwid);
|
||||
|
||||
+ free_multipathvec(curmp, KEEP_PATHS);
|
||||
+ vecs.mpvec = NULL;
|
||||
+ free_pathvec(pathvec, FREE_PATHS);
|
||||
+ vecs.pathvec = NULL;
|
||||
+
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -823,6 +827,7 @@ main (int argc, char *argv[])
|
||||
conf = get_multipath_config();
|
||||
conf->retrigger_tries = 0;
|
||||
conf->force_sync = 1;
|
||||
+ atexit(cleanup_vecs);
|
||||
while ((arg = getopt(argc, argv, ":adDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
switch(arg) {
|
||||
case 1: printf("optarg : %s\n",optarg);
|
@ -0,0 +1,28 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:58 -0500
|
||||
Subject: [PATCH] kpartx: Don't leak memory when getblock returns NULL
|
||||
|
||||
If a new block was allocated, but couldn't be filled, getblock will
|
||||
discard it. When it does so, it needs to free the block to avoid leaking
|
||||
memory. Found by coverity.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
kpartx/kpartx.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
|
||||
index 8ff116b8..7bc64543 100644
|
||||
--- a/kpartx/kpartx.c
|
||||
+++ b/kpartx/kpartx.c
|
||||
@@ -766,6 +766,8 @@ getblock (int fd, unsigned int blknr) {
|
||||
if (read(fd, bp->block, secsz) != secsz) {
|
||||
fprintf(stderr, "read error, sector %d\n", secnr);
|
||||
blockhead = bp->next;
|
||||
+ free(bp->block);
|
||||
+ free(bp);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Mon, 17 May 2021 11:29:59 -0500
|
||||
Subject: [PATCH] multipathd: don't rescan_path on wwid change in
|
||||
uev_update_path
|
||||
|
||||
If get_uid() is returning a different wwid in uev_update_path(), then
|
||||
the uid_attribute must have already gotten updated, which was the
|
||||
purpose behind calling rescan_path() in the first place.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
---
|
||||
multipathd/main.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 26a4e44e..2251e02c 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -1359,7 +1359,6 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
|
||||
condlog(0, "%s: path wwid changed from '%s' to '%s'",
|
||||
uev->kernel, wwid, pp->wwid);
|
||||
ev_remove_path(pp, vecs, 1);
|
||||
- rescan_path(uev->udev);
|
||||
needs_reinit = 1;
|
||||
goto out;
|
||||
} else {
|
@ -0,0 +1,82 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:37:34 +0200
|
||||
Subject: [PATCH] multipathd: cli_handlers: cleanup setting reply length
|
||||
|
||||
Create a macro for setting the reply length for string literals
|
||||
correctly, and use it where necessary.
|
||||
|
||||
In cli_del_path(), don't change the function's return code
|
||||
if just the buffer allocation for the reply failed.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 33 ++++++++++++---------------------
|
||||
1 file changed, 12 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 6765fcf0..96064944 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -32,6 +32,12 @@
|
||||
#include "foreign.h"
|
||||
#include "cli_handlers.h"
|
||||
|
||||
+#define SET_REPLY_AND_LEN(__rep, __len, string_literal) \
|
||||
+ do { \
|
||||
+ *(__rep) = strdup(string_literal); \
|
||||
+ *(__len) = *(__rep) ? sizeof(string_literal) : 0; \
|
||||
+ } while (0)
|
||||
+
|
||||
int
|
||||
show_paths (char ** r, int * len, struct vectors * vecs, char * style,
|
||||
int pretty)
|
||||
@@ -802,8 +808,7 @@ cli_add_path (void * v, char ** reply, int * len, void * data)
|
||||
}
|
||||
return ev_add_path(pp, vecs, 1);
|
||||
blacklisted:
|
||||
- *reply = strdup("blacklisted\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ SET_REPLY_AND_LEN(reply, len, "blacklisted\n");
|
||||
condlog(2, "%s: path blacklisted", param);
|
||||
return 0;
|
||||
}
|
||||
@@ -824,23 +829,10 @@ cli_del_path (void * v, char ** reply, int * len, void * data)
|
||||
return 1;
|
||||
}
|
||||
ret = ev_remove_path(pp, vecs, 1);
|
||||
- if (ret == REMOVE_PATH_DELAY) {
|
||||
- *reply = strdup("delayed\n");
|
||||
- if (*reply)
|
||||
- *len = strlen(*reply) + 1;
|
||||
- else {
|
||||
- *len = 0;
|
||||
- ret = REMOVE_PATH_FAILURE;
|
||||
- }
|
||||
- } else if (ret == REMOVE_PATH_MAP_ERROR) {
|
||||
- *reply = strdup("map reload error. removed\n");
|
||||
- if (*reply)
|
||||
- *len = strlen(*reply) + 1;
|
||||
- else {
|
||||
- *len = 0;
|
||||
- ret = REMOVE_PATH_FAILURE;
|
||||
- }
|
||||
- }
|
||||
+ if (ret == REMOVE_PATH_DELAY)
|
||||
+ SET_REPLY_AND_LEN(reply, len, "delayed\n");
|
||||
+ else if (ret == REMOVE_PATH_MAP_ERROR)
|
||||
+ SET_REPLY_AND_LEN(reply, len, "map reload error. removed\n");
|
||||
return (ret == REMOVE_PATH_FAILURE);
|
||||
}
|
||||
|
||||
@@ -865,8 +857,7 @@ cli_add_map (void * v, char ** reply, int * len, void * data)
|
||||
invalid = 1;
|
||||
pthread_cleanup_pop(1);
|
||||
if (invalid) {
|
||||
- *reply = strdup("blacklisted\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ SET_REPLY_AND_LEN(reply, len, "blacklisted\n");
|
||||
condlog(2, "%s: map blacklisted", param);
|
||||
return 1;
|
||||
}
|
53
0010-multipathd-cli_getprkey-fix-return-value.patch
Normal file
53
0010-multipathd-cli_getprkey-fix-return-value.patch
Normal file
@ -0,0 +1,53 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:45:05 +0200
|
||||
Subject: [PATCH] multipathd: cli_getprkey(): fix return value
|
||||
|
||||
By setting (*reply)[19] = '\0', we always truncated a possible
|
||||
":aptpl" suffix. Fix it, and use the return value of snprintf()
|
||||
as length.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/cli_handlers.c | 17 ++++++++---------
|
||||
1 file changed, 8 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 96064944..59d44b45 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -1540,7 +1540,7 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
|
||||
struct multipath * mpp;
|
||||
struct vectors * vecs = (struct vectors *)data;
|
||||
char *mapname = get_keyparam(v, MAP);
|
||||
- char *flagstr = "";
|
||||
+ uint64_t key;
|
||||
|
||||
mapname = convert_dev(mapname, 0);
|
||||
condlog(3, "%s: get persistent reservation key (operator)", mapname);
|
||||
@@ -1553,17 +1553,16 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
|
||||
if (!*reply)
|
||||
return 1;
|
||||
|
||||
- if (!get_be64(mpp->reservation_key)) {
|
||||
+ key = get_be64(mpp->reservation_key);
|
||||
+ if (!key) {
|
||||
sprintf(*reply, "none\n");
|
||||
- *len = strlen(*reply) + 1;
|
||||
+ *len = sizeof("none\n");
|
||||
return 0;
|
||||
}
|
||||
- if (mpp->sa_flags & MPATH_F_APTPL_MASK)
|
||||
- flagstr = ":aptpl";
|
||||
- snprintf(*reply, 26, "0x%" PRIx64 "%s\n",
|
||||
- get_be64(mpp->reservation_key), flagstr);
|
||||
- (*reply)[19] = '\0';
|
||||
- *len = strlen(*reply) + 1;
|
||||
+
|
||||
+ /* This snprintf() can't overflow - PRIx64 needs max 16 chars */
|
||||
+ *len = snprintf(*reply, 26, "0x%" PRIx64 "%s\n", key,
|
||||
+ mpp->sa_flags & MPATH_F_APTPL_MASK ? ":aptpl" : "") + 1;
|
||||
return 0;
|
||||
}
|
||||
|
64
0011-multipath-tools-enable-Wformat-overflow-2.patch
Normal file
64
0011-multipath-tools-enable-Wformat-overflow-2.patch
Normal file
@ -0,0 +1,64 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 22:43:02 +0200
|
||||
Subject: [PATCH] multipath-tools: enable -Wformat-overflow=2
|
||||
|
||||
Allow the compiler to catch possible format string overflows.
|
||||
Two were found by gcc 10.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 3 ++-
|
||||
libmultipath/discovery.c | 2 +-
|
||||
libmultipath/print.c | 4 ++--
|
||||
3 files changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index f1e23131..91100a20 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -95,9 +95,10 @@ TEST_CC_OPTION = $(shell \
|
||||
STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
|
||||
WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
|
||||
+WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
|
||||
|
||||
OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
-WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 -Werror=implicit-int \
|
||||
+WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
$(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index ec99a7aa..bfe2f56c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -635,7 +635,7 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp)
|
||||
{
|
||||
struct udev_device *rport_dev = NULL;
|
||||
char value[16], *eptr;
|
||||
- char rport_id[32];
|
||||
+ char rport_id[42];
|
||||
unsigned int tmo;
|
||||
int ret;
|
||||
|
||||
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||
index 8151e11e..3c69bf48 100644
|
||||
--- a/libmultipath/print.c
|
||||
+++ b/libmultipath/print.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/*
|
||||
+ /*
|
||||
* Copyright (c) 2005 Christophe Varoqui
|
||||
*/
|
||||
#include <stdio.h>
|
||||
@@ -594,7 +594,7 @@ int
|
||||
snprint_tgt_wwpn (char * buff, size_t len, const struct path * pp)
|
||||
{
|
||||
struct udev_device *rport_dev = NULL;
|
||||
- char rport_id[32];
|
||||
+ char rport_id[42];
|
||||
const char *value = NULL;
|
||||
int ret;
|
||||
|
347
0012-libdmmp-use-KBUILD_BUILD_TIMESTAMP-when-building-man.patch
Normal file
347
0012-libdmmp-use-KBUILD_BUILD_TIMESTAMP-when-building-man.patch
Normal file
@ -0,0 +1,347 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 17 May 2021 23:12:10 +0200
|
||||
Subject: [PATCH] libdmmp: use KBUILD_BUILD_TIMESTAMP when building man pages
|
||||
|
||||
Use the latest commit timestamp of the "libdmmp.h" file as
|
||||
the timestamp for the man pages. This should avoid spurious rebuilds
|
||||
of the documentation.
|
||||
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libdmmp/Makefile | 2 ++
|
||||
libdmmp/docs/man/dmmp_context_free.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_func_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_priority_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_log_priority_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_new.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_timeout_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_timeout_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_userdata_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_context_userdata_set.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_flush_mpath.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_last_error_msg.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_log_priority_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_array_free.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_kdev_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_mpath_wwid_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_blk_name_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_array_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_id_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_priority_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_selector_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_status_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_group_status_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_status_get.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_path_status_str.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_reconfig.3 | 2 +-
|
||||
libdmmp/docs/man/dmmp_strerror.3 | 2 +-
|
||||
30 files changed, 31 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/libdmmp/Makefile b/libdmmp/Makefile
|
||||
index 764a0bc5..79b92fb2 100644
|
||||
--- a/libdmmp/Makefile
|
||||
+++ b/libdmmp/Makefile
|
||||
@@ -76,6 +76,8 @@ docs/man/%.3.gz: docs/man/%.3
|
||||
docs/man/dmmp_strerror.3: $(HEADERS)
|
||||
TEMPFILE=$(shell mktemp); \
|
||||
cat $^ | perl docs/doc-preclean.pl >$$TEMPFILE; \
|
||||
+ LC_ALL=C \
|
||||
+ KBUILD_BUILD_TIMESTAMP=`git log -n1 --pretty=%cd --date=iso -- $^` \
|
||||
perl docs/kernel-doc -man $$TEMPFILE | \
|
||||
perl docs/split-man.pl docs/man; \
|
||||
rm -f $$TEMPFILE
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_free.3 b/libdmmp/docs/man/dmmp_context_free.3
|
||||
index 0d26f42c..7c109e13 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_free.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_free.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_free" 3 "dmmp_context_free" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_free" 3 "dmmp_context_free" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_free \- Release the memory of struct dmmp_context.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_func_set.3 b/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
index 986793db..be311ecf 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_func_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_func_set" 3 "dmmp_context_log_func_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_func_set" 3 "dmmp_context_log_func_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_func_set \- Set log handler function.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_priority_get.3 b/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
index 9a273a28..be383013 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_priority_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_priority_get" 3 "dmmp_context_log_priority_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_priority_get" 3 "dmmp_context_log_priority_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_priority_get \- Get log priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_log_priority_set.3 b/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
index 469c5a49..79e4d2e8 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_log_priority_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_log_priority_set" 3 "dmmp_context_log_priority_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_log_priority_set" 3 "dmmp_context_log_priority_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_log_priority_set \- Set log priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_new.3 b/libdmmp/docs/man/dmmp_context_new.3
|
||||
index 0eaeb00d..12505f91 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_new.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_new.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_new" 3 "dmmp_context_new" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_new" 3 "dmmp_context_new" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_new \- Create struct dmmp_context.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_timeout_get.3 b/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
index 1df27936..2ed825d5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_timeout_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_timeout_get" 3 "dmmp_context_timeout_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_timeout_get" 3 "dmmp_context_timeout_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_timeout_get \- Get IPC timeout.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_timeout_set.3 b/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
index f3d77092..16bc9d99 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_timeout_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_timeout_set" 3 "dmmp_context_timeout_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_timeout_set" 3 "dmmp_context_timeout_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_timeout_set \- Set IPC timeout.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_userdata_get.3 b/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
index fb713d50..eff446c6 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_userdata_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_userdata_get" 3 "dmmp_context_userdata_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_userdata_get" 3 "dmmp_context_userdata_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_userdata_get \- Get user data pointer.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_context_userdata_set.3 b/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
index c5bf63f3..d7be869f 100644
|
||||
--- a/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
+++ b/libdmmp/docs/man/dmmp_context_userdata_set.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_context_userdata_set" 3 "dmmp_context_userdata_set" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_context_userdata_set" 3 "dmmp_context_userdata_set" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_context_userdata_set \- Set user data pointer.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_flush_mpath.3 b/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
index cdfd5266..359607ed 100644
|
||||
--- a/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
+++ b/libdmmp/docs/man/dmmp_flush_mpath.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_flush_mpath" 3 "dmmp_flush_mpath" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_flush_mpath" 3 "dmmp_flush_mpath" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_flush_mpath \- Flush specified multipath device map if unused.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_last_error_msg.3 b/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
index 20acbc6a..378c55a5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
+++ b/libdmmp/docs/man/dmmp_last_error_msg.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_last_error_msg" 3 "dmmp_last_error_msg" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_last_error_msg" 3 "dmmp_last_error_msg" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_last_error_msg \- Retrieves the last error message.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_log_priority_str.3 b/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
index 3b5f8284..b2761602 100644
|
||||
--- a/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_log_priority_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_log_priority_str" 3 "dmmp_log_priority_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_log_priority_str" 3 "dmmp_log_priority_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_log_priority_str \- Convert log priority to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_array_free.3 b/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
index 8c294e0d..0514a66f 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_array_free.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_array_free" 3 "dmmp_mpath_array_free" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_array_free" 3 "dmmp_mpath_array_free" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_array_free \- Free 'struct dmmp_mpath' pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_array_get.3 b/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
index e211db42..8b0e5b53 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_array_get" 3 "dmmp_mpath_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_array_get" 3 "dmmp_mpath_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_array_get \- Query all existing multipath devices.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3 b/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
index e802fe6d..ddead551 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_kdev_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_kdev_name_get" 3 "dmmp_mpath_kdev_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_kdev_name_get" 3 "dmmp_mpath_kdev_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_kdev_name_get \- Retrieve kernel DEVNAME of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_name_get.3 b/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
index d70579e5..2b0027e5 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_name_get" 3 "dmmp_mpath_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_name_get" 3 "dmmp_mpath_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_name_get \- Retrieve name(alias) of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_mpath_wwid_get.3 b/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
index 3d060e92..b8e9e7d8 100644
|
||||
--- a/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_mpath_wwid_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_mpath_wwid_get" 3 "dmmp_mpath_wwid_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_mpath_wwid_get" 3 "dmmp_mpath_wwid_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_mpath_wwid_get \- Retrieve WWID of certain mpath.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_array_get.3 b/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
index 53340b3d..21f486be 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_array_get" 3 "dmmp_path_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_array_get" 3 "dmmp_path_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_array_get \- Retrieve path pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_blk_name_get.3 b/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
index da5f9f03..5938f0e7 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_blk_name_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_blk_name_get" 3 "dmmp_path_blk_name_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_blk_name_get" 3 "dmmp_path_blk_name_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_blk_name_get \- Retrieve block name.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_array_get.3 b/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
index 6eee4a2b..ca3187cb 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_array_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_array_get" 3 "dmmp_path_group_array_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_array_get" 3 "dmmp_path_group_array_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_array_get \- Retrieve path groups pointer array.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_id_get.3 b/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
index 4f07b536..a84f31f0 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_id_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_id_get" 3 "dmmp_path_group_id_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_id_get" 3 "dmmp_path_group_id_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_id_get \- Retrieve path group ID.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_priority_get.3 b/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
index a48b2704..1cda8af3 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_priority_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_priority_get" 3 "dmmp_path_group_priority_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_priority_get" 3 "dmmp_path_group_priority_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_priority_get \- Retrieve path group priority.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_selector_get.3 b/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
index 407b3f41..f55477bb 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_selector_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_selector_get" 3 "dmmp_path_group_selector_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_selector_get" 3 "dmmp_path_group_selector_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_selector_get \- Retrieve path group selector.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_status_get.3 b/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
index a81aeb3a..53e68b8e 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_status_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_status_get" 3 "dmmp_path_group_status_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_status_get" 3 "dmmp_path_group_status_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_status_get \- Retrieve path group status.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_group_status_str.3 b/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
index e4a9f74b..98f877a4 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_group_status_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_group_status_str" 3 "dmmp_path_group_status_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_group_status_str" 3 "dmmp_path_group_status_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_group_status_str \- Convert path group status to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_status_get.3 b/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
index 025cfee5..baa4437d 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_status_get.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_status_get" 3 "dmmp_path_status_get" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_status_get" 3 "dmmp_path_status_get" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_status_get \- Retrieve the path status.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_path_status_str.3 b/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
index 3944d399..425e472a 100644
|
||||
--- a/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
+++ b/libdmmp/docs/man/dmmp_path_status_str.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_path_status_str" 3 "dmmp_path_status_str" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_path_status_str" 3 "dmmp_path_status_str" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_path_status_str \- Convert path status to string.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_reconfig.3 b/libdmmp/docs/man/dmmp_reconfig.3
|
||||
index a743e308..36bd5041 100644
|
||||
--- a/libdmmp/docs/man/dmmp_reconfig.3
|
||||
+++ b/libdmmp/docs/man/dmmp_reconfig.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_reconfig" 3 "dmmp_reconfig" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_reconfig" 3 "dmmp_reconfig" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_reconfig \- Instruct multipathd daemon to do reconfiguration.
|
||||
.SH SYNOPSIS
|
||||
diff --git a/libdmmp/docs/man/dmmp_strerror.3 b/libdmmp/docs/man/dmmp_strerror.3
|
||||
index 4d753d36..3acd9c9d 100644
|
||||
--- a/libdmmp/docs/man/dmmp_strerror.3
|
||||
+++ b/libdmmp/docs/man/dmmp_strerror.3
|
||||
@@ -1,4 +1,4 @@
|
||||
-.TH "dmmp_strerror" 3 "dmmp_strerror" "March 2021" "Device Mapper Multipath API - libdmmp Manual"
|
||||
+.TH "dmmp_strerror" 3 "dmmp_strerror" "March 2018" "Device Mapper Multipath API - libdmmp Manual"
|
||||
.SH NAME
|
||||
dmmp_strerror \- Convert error code to string.
|
||||
.SH SYNOPSIS
|
@ -0,0 +1,52 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Sat, 5 Jun 2021 01:01:45 +0200
|
||||
Subject: [PATCH] multipath-tools: add info about HPE Alletra 6000 and 9000
|
||||
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
README.alua | 2 +-
|
||||
libmultipath/hwtable.c | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/README.alua b/README.alua
|
||||
index b15eb487..5d2b1c64 100644
|
||||
--- a/README.alua
|
||||
+++ b/README.alua
|
||||
@@ -6,7 +6,7 @@ To enable ALUA, the following options should be changed:
|
||||
- EMC CLARiiON/VNX:
|
||||
"Failover Mode" should be changed to "4" or "Active-Active mode(ALUA)-failover mode 4"
|
||||
|
||||
-- HPE 3PAR:
|
||||
+- HPE 3PAR, Primera, and Alletra 9000:
|
||||
"Host:" should be changed to "Generic-ALUA Persona 2 (UARepLun, SESLun, ALUA)".
|
||||
|
||||
- Promise VTrak/Vess:
|
||||
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||
index 58fa7387..e884d8c7 100644
|
||||
--- a/libmultipath/hwtable.c
|
||||
+++ b/libmultipath/hwtable.c
|
||||
@@ -107,7 +107,7 @@ static struct hwentry default_hw[] = {
|
||||
* HPE
|
||||
*/
|
||||
{
|
||||
- /* 3PAR / Primera */
|
||||
+ /* 3PAR / Primera / Alletra 9000 */
|
||||
.vendor = "3PARdata",
|
||||
.product = "VV",
|
||||
.pgpolicy = GROUP_BY_PRIO,
|
||||
@@ -225,7 +225,7 @@ static struct hwentry default_hw[] = {
|
||||
.prio_name = PRIO_ALUA,
|
||||
},
|
||||
{
|
||||
- /* Nimble Storage */
|
||||
+ /* Nimble Storage / HPE Alletra 6000 */
|
||||
.vendor = "Nimble",
|
||||
.product = "Server",
|
||||
.hwhandler = "1 alua",
|
32
0014-multipathd-don-t-start-in-containers.patch
Normal file
32
0014-multipathd-don-t-start-in-containers.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Utkarsh Gupta <utkarsh.gupta@canonical.com>
|
||||
Date: Mon, 7 Jun 2021 20:08:24 +0530
|
||||
Subject: [PATCH] multipathd: don't start in containers
|
||||
|
||||
Do not attempt to start multipath-tools in containers,
|
||||
should switch for on-demand udev/socket based
|
||||
activation in the future.
|
||||
|
||||
Originally reported as:
|
||||
https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1823093
|
||||
|
||||
Author: Dimitri John Ledkov <xnox@ubuntu.com>
|
||||
Co-Author: Utkarsh Gupta <utkarsh@debian.org>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipathd/multipathd.service | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index 7d547fa7..0b2ac814 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -8,6 +8,7 @@ DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
ConditionKernelCommandLine=!nompath
|
||||
ConditionKernelCommandLine=!multipath=off
|
||||
+ConditionVirtualization=!container
|
||||
|
||||
[Service]
|
||||
Type=notify
|
59
0015-libmultipath-fix-build-without-LIBDM_API_DEFERRED.patch
Normal file
59
0015-libmultipath-fix-build-without-LIBDM_API_DEFERRED.patch
Normal file
@ -0,0 +1,59 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Thu, 20 May 2021 21:26:01 +0200
|
||||
Subject: [PATCH] libmultipath: fix build without LIBDM_API_DEFERRED
|
||||
|
||||
Build fails on distributions that don't support DM_DEFERRED_REMOVE
|
||||
(libdevmapper < 1.02.89). Fix it.
|
||||
|
||||
Resolves: https://github.com/opensvc/multipath-tools/issues/7
|
||||
Tested-by: Paul Menzel <pmenzel@molgen.mpg.de>
|
||||
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/devmapper.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||
index 095cbc0c..47a6d60e 100644
|
||||
--- a/libmultipath/devmapper.c
|
||||
+++ b/libmultipath/devmapper.c
|
||||
@@ -49,6 +49,9 @@ static int dm_conf_verbosity;
|
||||
|
||||
#ifdef LIBDM_API_DEFERRED
|
||||
static int dm_cancel_remove_partmaps(const char * mapname);
|
||||
+#define __DR_UNUSED__ /* empty */
|
||||
+#else
|
||||
+#define __DR_UNUSED__ __attribute__((unused))
|
||||
#endif
|
||||
|
||||
static int do_foreach_partmaps(const char * mapname,
|
||||
@@ -384,7 +387,8 @@ libmp_dm_task_create(int task)
|
||||
#define do_deferred(x) ((x) == DEFERRED_REMOVE_ON || (x) == DEFERRED_REMOVE_IN_PROGRESS)
|
||||
|
||||
static int
|
||||
-dm_simplecmd (int task, const char *name, int no_flush, int need_sync, uint16_t udev_flags, int deferred_remove) {
|
||||
+dm_simplecmd (int task, const char *name, int no_flush, int need_sync,
|
||||
+ uint16_t udev_flags, int deferred_remove __DR_UNUSED__) {
|
||||
int r = 0;
|
||||
int udev_wait_flag = ((need_sync || udev_flags) &&
|
||||
(task == DM_DEVICE_RESUME ||
|
||||
@@ -1122,7 +1126,8 @@ dm_flush_map_nopaths(const char * mapname, int deferred_remove)
|
||||
#else
|
||||
|
||||
int
|
||||
-dm_flush_map_nopaths(const char * mapname, int deferred_remove)
|
||||
+dm_flush_map_nopaths(const char * mapname,
|
||||
+ int deferred_remove __attribute__((unused)))
|
||||
{
|
||||
return _dm_flush_map(mapname, 1, 0, 0, 0);
|
||||
}
|
||||
@@ -1573,7 +1578,7 @@ dm_cancel_deferred_remove (struct multipath *mpp)
|
||||
#else
|
||||
|
||||
int
|
||||
-dm_cancel_deferred_remove (struct multipath *mpp)
|
||||
+dm_cancel_deferred_remove (struct multipath *mpp __attribute__((unused)))
|
||||
{
|
||||
return 0;
|
||||
}
|
@ -15,7 +15,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index f1e23131..c593fd3b 100644
|
||||
index 91100a20..6c3714eb 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -55,7 +55,7 @@ endif
|
@ -81,7 +81,7 @@ index 048a838d..8bd47a80 100644
|
||||
.
|
||||
.\" ----------------------------------------------------------------------------
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index 7d547fa7..af592057 100644
|
||||
index 0b2ac814..6d57c7e8 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -4,6 +4,7 @@ Wants=systemd-udev-trigger.service systemd-udev-settle.service
|
@ -13,19 +13,20 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index c593fd3b..87fb39f2 100644
|
||||
index 6c3714eb..db35feb6 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -92,15 +92,27 @@ TEST_CC_OPTION = $(shell \
|
||||
@@ -92,16 +92,28 @@ TEST_CC_OPTION = $(shell \
|
||||
echo "$(2)"; \
|
||||
fi)
|
||||
|
||||
-STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
|
||||
WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
|
||||
WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
|
||||
|
||||
-OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
-WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 -Werror=implicit-int \
|
||||
-WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
+ifndef RPM_OPT_FLAGS
|
||||
+ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
|
||||
+ OPTFLAGS := -O2 -g -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
|
||||
@ -40,7 +41,7 @@ index c593fd3b..87fb39f2 100644
|
||||
+else
|
||||
+ OPTFLAGS := $(RPM_OPT_FLAGS) --param=ssp-buffer-size=4
|
||||
+endif
|
||||
+WARNFLAGS := -Werror -Wextra -Wformat=2 -Werror=implicit-int \
|
||||
+WARNFLAGS := -Werror -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
- $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
@ -49,7 +50,7 @@ index c593fd3b..87fb39f2 100644
|
||||
CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
||||
-DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
|
||||
-MMD -MP
|
||||
@@ -138,4 +150,4 @@ check_file = $(shell \
|
||||
@@ -139,4 +151,4 @@ check_file = $(shell \
|
||||
|
||||
%.o: %.c
|
||||
@echo building $@ because of $?
|
@ -20,7 +20,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
3 files changed, 59 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index ef89c7cf..f618550d 100644
|
||||
index 8fc0e15f..9fe53dcd 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -122,7 +122,7 @@ usage (char * progname)
|
||||
@ -92,16 +92,16 @@ index ef89c7cf..f618550d 100644
|
||||
static int
|
||||
configure (struct config *conf, enum mpath_cmds cmd,
|
||||
enum devtypes dev_type, char *devpath)
|
||||
@@ -823,7 +869,7 @@ main (int argc, char *argv[])
|
||||
conf = get_multipath_config();
|
||||
@@ -828,7 +874,7 @@ main (int argc, char *argv[])
|
||||
conf->retrigger_tries = 0;
|
||||
conf->force_sync = 1;
|
||||
atexit(cleanup_vecs);
|
||||
- while ((arg = getopt(argc, argv, ":adDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
+ while ((arg = getopt(argc, argv, ":aAdDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||||
switch(arg) {
|
||||
case 1: printf("optarg : %s\n",optarg);
|
||||
break;
|
||||
@@ -900,6 +946,10 @@ main (int argc, char *argv[])
|
||||
@@ -905,6 +951,10 @@ main (int argc, char *argv[])
|
||||
case 'T':
|
||||
cmd = CMD_DUMP_CONFIG;
|
||||
break;
|
||||
@ -138,10 +138,10 @@ index 5b29a5d9..0478f4e7 100644
|
||||
Remove the WWID for the specified device from the WWIDs file.
|
||||
.
|
||||
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
|
||||
index af592057..bc8fa07a 100644
|
||||
index 6d57c7e8..dfc1e962 100644
|
||||
--- a/multipathd/multipathd.service
|
||||
+++ b/multipathd/multipathd.service
|
||||
@@ -15,6 +15,7 @@ Type=notify
|
||||
@@ -16,6 +16,7 @@ Type=notify
|
||||
NotifyAccess=main
|
||||
LimitCORE=infinity
|
||||
ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath
|
@ -13,7 +13,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
1 file changed, 2 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index ec99a7aa..2704270e 100644
|
||||
index bfe2f56c..4bb7ba2f 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1135,12 +1135,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
@ -1,6 +1,6 @@
|
||||
Name: device-mapper-multipath
|
||||
Version: 0.8.6
|
||||
Release: 1%{?dist}.1
|
||||
Release: 2%{?dist}
|
||||
Summary: Tools to manage multipath devices using device-mapper
|
||||
License: GPLv2
|
||||
URL: http://christophe.varoqui.free.fr/
|
||||
@ -10,16 +10,31 @@ URL: http://christophe.varoqui.free.fr/
|
||||
# curl -L https://github.com/opensvc/multipath-tools/archive/0.8.6.tar.gz -o multipath-tools-0.8.6.tgz
|
||||
Source0: multipath-tools-0.8.6.tgz
|
||||
Source1: multipath.conf
|
||||
Patch0001: 0001-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0002: 0002-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0003: 0003-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0004: 0004-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0005: 0005-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0006: 0006-RH-add-mpathconf.patch
|
||||
Patch0007: 0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0008: 0008-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0009: 0009-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0010: 0010-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
Patch0001: 0001-libmultipath-fix-memory-leak-in-checker_cleanup_thre.patch
|
||||
Patch0002: 0002-multipathd-fix-compilation-issue-with-liburcu-0.8.patch
|
||||
Patch0003: 0003-multipathd-don-t-fail-to-remove-path-once-the-map-is.patch
|
||||
Patch0004: 0004-multipathd-remove-duplicate-orphan_paths-in-flush_ma.patch
|
||||
Patch0005: 0005-multipathd-fix-ev_remove_path-return-code-handling.patch
|
||||
Patch0006: 0006-multipath-free-vectors-in-configure.patch
|
||||
Patch0007: 0007-kpartx-Don-t-leak-memory-when-getblock-returns-NULL.patch
|
||||
Patch0008: 0008-multipathd-don-t-rescan_path-on-wwid-change-in-uev_u.patch
|
||||
Patch0009: 0009-multipathd-cli_handlers-cleanup-setting-reply-length.patch
|
||||
Patch0010: 0010-multipathd-cli_getprkey-fix-return-value.patch
|
||||
Patch0011: 0011-multipath-tools-enable-Wformat-overflow-2.patch
|
||||
Patch0012: 0012-libdmmp-use-KBUILD_BUILD_TIMESTAMP-when-building-man.patch
|
||||
Patch0013: 0013-multipath-tools-add-info-about-HPE-Alletra-6000-and-.patch
|
||||
Patch0014: 0014-multipathd-don-t-start-in-containers.patch
|
||||
Patch0015: 0015-libmultipath-fix-build-without-LIBDM_API_DEFERRED.patch
|
||||
Patch0016: 0016-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0017: 0017-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0018: 0018-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0019: 0019-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0020: 0020-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0021: 0021-RH-add-mpathconf.patch
|
||||
Patch0022: 0022-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0023: 0023-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0024: 0024-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0025: 0025-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
|
||||
# runtime
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
@ -217,6 +232,14 @@ fi
|
||||
%{_pkgconfdir}/libdmmp.pc
|
||||
|
||||
%changelog
|
||||
* Thu Jul 1 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.6-2
|
||||
- Pull in latest upstream post-tag commits
|
||||
* Patches 0001-0015 are from
|
||||
https://github.com/openSUSE/multipath-tools/tree/queue and are
|
||||
already queued for upstream
|
||||
- Rename files
|
||||
* Previous patches 0001-0010 and now patches 0016-0025
|
||||
|
||||
* Wed Jun 23 2021 Cole Robinson <crobinso@redhat.com> - 0.8.6-1.fc35.1
|
||||
- Rebuild for userspace-rcu soname bump
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user