From 719f475042a1f0909ec11820830fa8bd3f60ffbb Mon Sep 17 00:00:00 2001 From: Benjamin Marzinski Date: Thu, 31 Jan 2019 17:04:52 -0600 Subject: [PATCH] device-mapper-multipath-0.7.9-4.git2df6110 Update Source to latest upstream commit * previous patch 0001-libmultipath-dm_is_mpath-cleanup.patch is included in this commit Rename files * Previous patches 0002-0009 are now patches 0006-0013 Add 0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch Add 0002-libmultipath-handle-existing-paths-in-marginal_path-.patch Add 0003-multipathd-cleanup-marginal-paths-checking-timers.patch Add 0004-libmultipath-fix-marginal-paths-queueing-errors.patch Add 0005-libmultipath-fix-marginal_paths-nr_active-check.patch * The above 5 patches have been submitted upstream Add 0014-RH-Fix-nvme-compilation-warning.patch * This change is only necessary because of Red Hat compilation differences. --- .gitignore | 1 + ...sable-user_friendly_names-for-NetApp.patch | 31 +++ 0001-libmultipath-dm_is_mpath-cleanup.patch | 92 --------- ...dle-existing-paths-in-marginal_path-.patch | 49 +++++ ...eanup-marginal-paths-checking-timers.patch | 70 +++++++ ...h-fix-marginal-paths-queueing-errors.patch | 176 ++++++++++++++++++ ...h-fix-marginal_paths-nr_active-check.patch | 30 +++ ... 0006-RH-fixup-udev-rules-for-redhat.patch | 24 +-- ...property-blacklist-exception-builtin.patch | 4 +- ...RH-don-t-start-without-a-config-file.patch | 6 +- ... 0009-RH-use-rpm-optflags-if-present.patch | 4 +- ...hconf.patch => 0010-RH-add-mpathconf.patch | 4 +- ...om-kernel-cmdline-mpath.wwids-with-A.patch | 6 +- ...-on-invalid-regex-instead-of-failing.patch | 8 +- ...-default-find_mutipaths-value-to-off.patch | 0 0014-RH-Fix-nvme-compilation-warning.patch | 26 +++ device-mapper-multipath.spec | 50 +++-- sources | 2 +- 18 files changed, 442 insertions(+), 141 deletions(-) create mode 100644 0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch delete mode 100644 0001-libmultipath-dm_is_mpath-cleanup.patch create mode 100644 0002-libmultipath-handle-existing-paths-in-marginal_path-.patch create mode 100644 0003-multipathd-cleanup-marginal-paths-checking-timers.patch create mode 100644 0004-libmultipath-fix-marginal-paths-queueing-errors.patch create mode 100644 0005-libmultipath-fix-marginal_paths-nr_active-check.patch rename 0002-RH-fixup-udev-rules-for-redhat.patch => 0006-RH-fixup-udev-rules-for-redhat.patch (76%) rename 0003-RH-Remove-the-property-blacklist-exception-builtin.patch => 0007-RH-Remove-the-property-blacklist-exception-builtin.patch (97%) rename 0004-RH-don-t-start-without-a-config-file.patch => 0008-RH-don-t-start-without-a-config-file.patch (97%) rename 0005-RH-use-rpm-optflags-if-present.patch => 0009-RH-use-rpm-optflags-if-present.patch (96%) rename 0006-RH-add-mpathconf.patch => 0010-RH-add-mpathconf.patch (99%) rename 0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch => 0011-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch (97%) rename 0008-RH-warn-on-invalid-regex-instead-of-failing.patch => 0012-RH-warn-on-invalid-regex-instead-of-failing.patch (93%) rename 0009-RH-reset-default-find_mutipaths-value-to-off.patch => 0013-RH-reset-default-find_mutipaths-value-to-off.patch (100%) create mode 100644 0014-RH-Fix-nvme-compilation-warning.patch diff --git a/.gitignore b/.gitignore index 15d410f..23fc5ca 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ multipath-tools-091027.tar.gz /multipath-tools-0.7.8.tgz /multipath-tools-0.7.9.tgz /multipath-tools-17a6101.tgz +/multipath-tools-2df6110.tgz diff --git a/0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch b/0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch new file mode 100644 index 0000000..491a21d --- /dev/null +++ b/0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Thu, 24 Jan 2019 14:09:23 -0600 +Subject: [PATCH] BZ 1668693: disable user_friendly_names for NetApp + +NetApp has tools that rely on devices using WWID names. To avoid +breaking these, NetApp devices should continue to use WWID names, even +if the default config is set to enable user_friendly_names. If users +want to use user_friendly_names on NetApp devices, the must specifically +override the device config. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/hwtable.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c +index d3a8d9b..8776411 100644 +--- a/libmultipath/hwtable.c ++++ b/libmultipath/hwtable.c +@@ -719,6 +719,7 @@ static struct hwentry default_hw[] = { + .flush_on_last_del = FLUSH_ENABLED, + .dev_loss = MAX_DEV_LOSS_TMO, + .prio_name = PRIO_ONTAP, ++ .user_friendly_names = USER_FRIENDLY_NAMES_OFF, + }, + { + /* +-- +2.17.2 + diff --git a/0001-libmultipath-dm_is_mpath-cleanup.patch b/0001-libmultipath-dm_is_mpath-cleanup.patch deleted file mode 100644 index 949b20b..0000000 --- a/0001-libmultipath-dm_is_mpath-cleanup.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 11 Dec 2018 14:11:19 -0600 -Subject: [PATCH] libmultipath: dm_is_mpath cleanup - -Add condlog() message in dm_is_mpath() fails and change the -dm_is_mpath() call in watch_dmevents() to check the return value with -the same syntax as all the other callers. - -Fixes: 9050cd5a "libmultipath: fix false removes in dmevents polling code" -Signed-off-by: Benjamin Marzinski ---- - libmultipath/devmapper.c | 21 ++++++++++++--------- - multipathd/dmevents.c | 4 +++- - 2 files changed, 15 insertions(+), 10 deletions(-) - -diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c -index 0e98923..3294bd4 100644 ---- a/libmultipath/devmapper.c -+++ b/libmultipath/devmapper.c -@@ -709,41 +709,44 @@ int dm_is_mpath(const char *name) - const char *uuid; - - if (!(dmt = libmp_dm_task_create(DM_DEVICE_TABLE))) -- return -1; -+ goto out; - - if (!dm_task_set_name(dmt, name)) -- goto out; -+ goto out_task; - - dm_task_no_open_count(dmt); - - if (!dm_task_run(dmt)) -- goto out; -+ goto out_task; - - if (!dm_task_get_info(dmt, &info)) -- goto out; -+ goto out_task; - - r = 0; - - if (!info.exists) -- goto out; -+ goto out_task; - - uuid = dm_task_get_uuid(dmt); - - if (!uuid || strncmp(uuid, UUID_PREFIX, UUID_PREFIX_LEN) != 0) -- goto out; -+ goto out_task; - - /* Fetch 1st target */ - if (dm_get_next_target(dmt, NULL, &start, &length, &target_type, - ¶ms) != NULL) - /* multiple targets */ -- goto out; -+ goto out_task; - - if (!target_type || strcmp(target_type, TGT_MPATH) != 0) -- goto out; -+ goto out_task; - - r = 1; --out: -+out_task: - dm_task_destroy(dmt); -+out: -+ if (r < 0) -+ condlog(2, "%s: dm command failed in %s", name, __FUNCTION__); - return r; - } - -diff --git a/multipathd/dmevents.c b/multipathd/dmevents.c -index aae7a09..0034892 100644 ---- a/multipathd/dmevents.c -+++ b/multipathd/dmevents.c -@@ -206,7 +206,9 @@ int watch_dmevents(char *name) - struct dev_event *dev_evt, *old_dev_evt; - int i; - -- if (!dm_is_mpath(name)) { -+ /* We know that this is a multipath device, so only fail if -+ * device-mapper tells us that we're wrong */ -+ if (dm_is_mpath(name) == 0) { - condlog(0, "%s: not a multipath device. can't watch events", - name); - return -1; --- -2.17.2 - diff --git a/0002-libmultipath-handle-existing-paths-in-marginal_path-.patch b/0002-libmultipath-handle-existing-paths-in-marginal_path-.patch new file mode 100644 index 0000000..93a3d7c --- /dev/null +++ b/0002-libmultipath-handle-existing-paths-in-marginal_path-.patch @@ -0,0 +1,49 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Fri, 25 Jan 2019 16:45:26 -0600 +Subject: [PATCH] libmultipath: handle existing paths in marginal_path enqueue + +If the path that enqueue_io_err_stat_by_path() is trying to add +is already on the list, just return success. There's no reason +to fail in this case. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/io_err_stat.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c +index 02b1453..1cb3ffe 100644 +--- a/libmultipath/io_err_stat.c ++++ b/libmultipath/io_err_stat.c +@@ -254,7 +254,6 @@ static void free_io_err_pathvec(struct io_err_stat_pathvec *p) + * return value + * 0: enqueue OK + * 1: fails because of internal error +- * 2: fails because of existing already + */ + static int enqueue_io_err_stat_by_path(struct path *path) + { +@@ -264,7 +263,7 @@ static int enqueue_io_err_stat_by_path(struct path *path) + p = find_err_path_by_dev(paths->pathvec, path->dev); + if (p) { + pthread_mutex_unlock(&paths->mutex); +- return 2; ++ return 0; + } + pthread_mutex_unlock(&paths->mutex); + +@@ -418,9 +417,8 @@ int hit_io_err_recheck_time(struct path *pp) + io_err_stat_log(3, "%s: enqueue fails, to recover", + pp->dev); + goto recover; +- } else if (!r) { ++ } else + pp->io_err_pathfail_cnt = PATH_IO_ERR_IN_CHECKING; +- } + } + + return 1; +-- +2.17.2 + diff --git a/0003-multipathd-cleanup-marginal-paths-checking-timers.patch b/0003-multipathd-cleanup-marginal-paths-checking-timers.patch new file mode 100644 index 0000000..95c8044 --- /dev/null +++ b/0003-multipathd-cleanup-marginal-paths-checking-timers.patch @@ -0,0 +1,70 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Fri, 25 Jan 2019 17:09:42 -0600 +Subject: [PATCH] multipathd: cleanup marginal paths checking timers + +When a path gets recovered in hit_io_err_recheck_time(), it will +continue running in check_path(), so there is no reason to schedule +another path check as soon as possible (since one is currently +happening). + +Also, there isn't much point in restarting the io err stat checking when +the path is down, so hit_io_err_recheck_time() should only be run when +the path is up. Downed marginal paths can be treated just like any other +downed path. + +Finally, there is no reason to set reset pp->io_err_dis_reinstate_time +when we decide to enqueue a path. Either th enqueue will fail and the +path will get recovered, or it will succeed, and we won't check the +reinstate time again until poll_io_err_stat() marks the path as needing +a requeue. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/io_err_stat.c | 8 -------- + multipathd/main.c | 3 ++- + 2 files changed, 2 insertions(+), 9 deletions(-) + +diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c +index 1cb3ffe..416e13a 100644 +--- a/libmultipath/io_err_stat.c ++++ b/libmultipath/io_err_stat.c +@@ -400,13 +400,6 @@ int hit_io_err_recheck_time(struct path *pp) + io_err_stat_log(4, "%s: reschedule checking after %d seconds", + pp->dev, + pp->mpp->marginal_path_err_recheck_gap_time); +- /* +- * to reschedule io error checking again +- * if the path is good enough, we claim it is good +- * and can be reinsated as soon as possible in the +- * check_path routine. +- */ +- pp->io_err_dis_reinstate_time = curr_time.tv_sec; + r = enqueue_io_err_stat_by_path(pp); + /* + * Enqueue fails because of internal error. +@@ -426,7 +419,6 @@ int hit_io_err_recheck_time(struct path *pp) + recover: + pp->io_err_pathfail_cnt = 0; + pp->io_err_disable_reinstate = 0; +- pp->tick = 1; + return 0; + } + +diff --git a/multipathd/main.c b/multipathd/main.c +index 491832b..cac9050 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -2075,7 +2075,8 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) + return 1; + } + +- if (pp->io_err_disable_reinstate && hit_io_err_recheck_time(pp)) { ++ if ((newstate == PATH_UP || newstate == PATH_GHOST) && ++ pp->io_err_disable_reinstate && hit_io_err_recheck_time(pp)) { + pp->state = PATH_SHAKY; + /* + * to reschedule as soon as possible,so that this path can +-- +2.17.2 + diff --git a/0004-libmultipath-fix-marginal-paths-queueing-errors.patch b/0004-libmultipath-fix-marginal-paths-queueing-errors.patch new file mode 100644 index 0000000..ba2642c --- /dev/null +++ b/0004-libmultipath-fix-marginal-paths-queueing-errors.patch @@ -0,0 +1,176 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Mon, 28 Jan 2019 00:20:53 -0600 +Subject: [PATCH] libmultipath: fix marginal paths queueing errors + +The current marginal paths code tries to enqueue paths for io error +checking when multipathd receives a uevent on path failure. This can run +into a couple of problems. First, this uevent could happen before or +after multipathd actually fails the path, so simply checking nr_active +doesn't tell us if this is the last active path. Also, The code to fail +the path in enqueue_io_err_stat_by_path() doesn't ever update the path +state. This can cause the path to get failed twice, temporarily leading +to incorrect nr_active counts. Further, The point when multipathd should +care if this is the last active path is when the path has come up again, +not when it goes down. Lastly, if the path is down, it is often +impossible to open the path device, causing setup_directio_ctx() to +fail, which causes multipathd to skip io error checking and mark the +path as not marginal. + +Instead, multipathd should just make sure that if the path is marginal, +it gets failed in the uevent, so as not to race with the checkerloop +thread. Then, when the path comes back up, check_path() can enqueue it, +just like it does for paths that need to get rechecked. To make it +obvious that the state PATH_IO_ERR_IN_POLLING_RECHECK and the function +hit_io_err_recheck_time() now apply to paths waiting to be enqueued for +the first time as well, I've also changed their names to +PATH_IO_ERR_WAITING_TO_CHECK and need_io_err_check(), respectively. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/io_err_stat.c | 55 +++++++++++++++++--------------------- + libmultipath/io_err_stat.h | 2 +- + multipathd/main.c | 2 +- + 3 files changed, 27 insertions(+), 32 deletions(-) + +diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c +index 416e13a..72aacf3 100644 +--- a/libmultipath/io_err_stat.c ++++ b/libmultipath/io_err_stat.c +@@ -41,7 +41,7 @@ + #define CONCUR_NR_EVENT 32 + + #define PATH_IO_ERR_IN_CHECKING -1 +-#define PATH_IO_ERR_IN_POLLING_RECHECK -2 ++#define PATH_IO_ERR_WAITING_TO_CHECK -2 + + #define io_err_stat_log(prio, fmt, args...) \ + condlog(prio, "io error statistic: " fmt, ##args) +@@ -283,24 +283,6 @@ static int enqueue_io_err_stat_by_path(struct path *path) + vector_set_slot(paths->pathvec, p); + pthread_mutex_unlock(&paths->mutex); + +- if (!path->io_err_disable_reinstate) { +- /* +- *fail the path in the kernel for the time of the to make +- *the test more reliable +- */ +- io_err_stat_log(3, "%s: fail dm path %s before checking", +- path->mpp->alias, path->dev); +- path->io_err_disable_reinstate = 1; +- dm_fail_path(path->mpp->alias, path->dev_t); +- update_queue_mode_del_path(path->mpp); +- +- /* +- * schedule path check as soon as possible to +- * update path state to delayed state +- */ +- path->tick = 1; +- +- } + io_err_stat_log(2, "%s: enqueue path %s to check", + path->mpp->alias, path->dev); + return 0; +@@ -317,7 +299,6 @@ free_ioerr_path: + int io_err_stat_handle_pathfail(struct path *path) + { + struct timespec curr_time; +- int res; + + if (uatomic_read(&io_err_thread_running) == 0) + return 1; +@@ -332,8 +313,6 @@ int io_err_stat_handle_pathfail(struct path *path) + + if (!path->mpp) + return 1; +- if (path->mpp->nr_active <= 1) +- return 1; + if (path->mpp->marginal_path_double_failed_time <= 0 || + path->mpp->marginal_path_err_sample_time <= 0 || + path->mpp->marginal_path_err_recheck_gap_time <= 0 || +@@ -371,17 +350,33 @@ int io_err_stat_handle_pathfail(struct path *path) + } + path->io_err_pathfail_cnt++; + if (path->io_err_pathfail_cnt >= FLAKY_PATHFAIL_THRESHOLD) { +- res = enqueue_io_err_stat_by_path(path); +- if (!res) +- path->io_err_pathfail_cnt = PATH_IO_ERR_IN_CHECKING; +- else +- path->io_err_pathfail_cnt = 0; ++ path->io_err_disable_reinstate = 1; ++ path->io_err_pathfail_cnt = PATH_IO_ERR_WAITING_TO_CHECK; ++ /* enqueue path as soon as it comes up */ ++ path->io_err_dis_reinstate_time = 0; ++ if (path->state != PATH_DOWN) { ++ struct config *conf; ++ int oldstate = path->state; ++ int checkint; ++ ++ conf = get_multipath_config(); ++ checkint = conf->checkint; ++ put_multipath_config(conf); ++ io_err_stat_log(2, "%s: mark as failed", path->dev); ++ path->mpp->stat_path_failures++; ++ path->state = PATH_DOWN; ++ path->dmstate = PSTATE_FAILED; ++ if (oldstate == PATH_UP || oldstate == PATH_GHOST) ++ update_queue_mode_del_path(path->mpp); ++ if (path->tick > checkint) ++ path->tick = checkint; ++ } + } + + return 0; + } + +-int hit_io_err_recheck_time(struct path *pp) ++int need_io_err_check(struct path *pp) + { + struct timespec curr_time; + int r; +@@ -392,7 +387,7 @@ int hit_io_err_recheck_time(struct path *pp) + io_err_stat_log(2, "%s: recover path early", pp->dev); + goto recover; + } +- if (pp->io_err_pathfail_cnt != PATH_IO_ERR_IN_POLLING_RECHECK) ++ if (pp->io_err_pathfail_cnt != PATH_IO_ERR_WAITING_TO_CHECK) + return 1; + if (clock_gettime(CLOCK_MONOTONIC, &curr_time) != 0 || + (curr_time.tv_sec - pp->io_err_dis_reinstate_time) > +@@ -489,7 +484,7 @@ static int poll_io_err_stat(struct vectors *vecs, struct io_err_stat_path *pp) + } else if (path->mpp && path->mpp->nr_active > 1) { + io_err_stat_log(3, "%s: keep failing the dm path %s", + path->mpp->alias, path->dev); +- path->io_err_pathfail_cnt = PATH_IO_ERR_IN_POLLING_RECHECK; ++ path->io_err_pathfail_cnt = PATH_IO_ERR_WAITING_TO_CHECK; + path->io_err_disable_reinstate = 1; + path->io_err_dis_reinstate_time = currtime.tv_sec; + io_err_stat_log(3, "%s: disable reinstating of %s", +diff --git a/libmultipath/io_err_stat.h b/libmultipath/io_err_stat.h +index bbf31b4..53d6d7d 100644 +--- a/libmultipath/io_err_stat.h ++++ b/libmultipath/io_err_stat.h +@@ -10,6 +10,6 @@ extern pthread_attr_t io_err_stat_attr; + int start_io_err_stat_thread(void *data); + void stop_io_err_stat_thread(void); + int io_err_stat_handle_pathfail(struct path *path); +-int hit_io_err_recheck_time(struct path *pp); ++int need_io_err_check(struct path *pp); + + #endif /* _IO_ERR_STAT_H */ +diff --git a/multipathd/main.c b/multipathd/main.c +index cac9050..0e3ac2c 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -2076,7 +2076,7 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) + } + + if ((newstate == PATH_UP || newstate == PATH_GHOST) && +- pp->io_err_disable_reinstate && hit_io_err_recheck_time(pp)) { ++ pp->io_err_disable_reinstate && need_io_err_check(pp)) { + pp->state = PATH_SHAKY; + /* + * to reschedule as soon as possible,so that this path can +-- +2.17.2 + diff --git a/0005-libmultipath-fix-marginal_paths-nr_active-check.patch b/0005-libmultipath-fix-marginal_paths-nr_active-check.patch new file mode 100644 index 0000000..486e03a --- /dev/null +++ b/0005-libmultipath-fix-marginal_paths-nr_active-check.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Tue, 29 Jan 2019 18:26:04 -0600 +Subject: [PATCH] libmultipath: fix marginal_paths nr_active check + +Marginal paths are SHAKY, so they don't count towards the number of +active paths. poll_io_err_stat() shouldn't automatically reinstate a +marginal path if there already is an active path. + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/io_err_stat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c +index 72aacf3..554b777 100644 +--- a/libmultipath/io_err_stat.c ++++ b/libmultipath/io_err_stat.c +@@ -481,7 +481,7 @@ static int poll_io_err_stat(struct vectors *vecs, struct io_err_stat_path *pp) + */ + path->tick = 1; + +- } else if (path->mpp && path->mpp->nr_active > 1) { ++ } else if (path->mpp && path->mpp->nr_active > 0) { + io_err_stat_log(3, "%s: keep failing the dm path %s", + path->mpp->alias, path->dev); + path->io_err_pathfail_cnt = PATH_IO_ERR_WAITING_TO_CHECK; +-- +2.17.2 + diff --git a/0002-RH-fixup-udev-rules-for-redhat.patch b/0006-RH-fixup-udev-rules-for-redhat.patch similarity index 76% rename from 0002-RH-fixup-udev-rules-for-redhat.patch rename to 0006-RH-fixup-udev-rules-for-redhat.patch index 9d1223e..6c1bf63 100644 --- a/0002-RH-fixup-udev-rules-for-redhat.patch +++ b/0006-RH-fixup-udev-rules-for-redhat.patch @@ -5,23 +5,20 @@ Subject: [PATCH] RH: fixup udev rules for redhat The multipath rules need to run after scsi_id is run. This means moving them after 60-persistent-storage.rules for redhat. Redhat also uses a -different naming scheme for partitions than SuSE. Also, there are some -false warnings that gcc throws because of the changed options. Fix these -too. +different naming scheme for partitions than SuSE. Signed-off-by: Benjamin Marzinski --- Makefile.inc | 2 +- kpartx/kpartx.rules | 2 +- multipath/Makefile | 4 ++-- - multipath/main.c | 2 +- - 4 files changed, 5 insertions(+), 5 deletions(-) + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index a83f02c..b86cba6 100644 +index fc728ca..2f0bcea 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -51,7 +51,7 @@ endif +@@ -48,7 +48,7 @@ endif prefix = exec_prefix = $(prefix) usr_prefix = $(prefix) @@ -64,19 +61,6 @@ index 0828a8f..b9bbb3c 100644 $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz -diff --git a/multipath/main.c b/multipath/main.c -index f40c179..f3265ee 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -414,7 +414,7 @@ static int find_multipaths_check_timeout(const struct path *pp, long tmo, - struct timespec now, ftimes[2], tdiff; - struct stat st; - long fd; -- int r, err, retries = 0; -+ int r, err = 0, retries = 0; - - clock_gettime(CLOCK_REALTIME, &now); - -- 2.17.2 diff --git a/0003-RH-Remove-the-property-blacklist-exception-builtin.patch b/0007-RH-Remove-the-property-blacklist-exception-builtin.patch similarity index 97% rename from 0003-RH-Remove-the-property-blacklist-exception-builtin.patch rename to 0007-RH-Remove-the-property-blacklist-exception-builtin.patch index 110fa8e..37f9ff8 100644 --- a/0003-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/0007-RH-Remove-the-property-blacklist-exception-builtin.patch @@ -49,10 +49,10 @@ index 709895e..224e5b3 100644 udev_device_get_properties_list_entry(udev)) { diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 6333366..3dab26b 100644 +index 88b8edd..2f6cf03 100644 --- a/multipath/multipath.conf.5 +++ b/multipath/multipath.conf.5 -@@ -1195,16 +1195,14 @@ keywords. Both are regular expressions. For a full description of these keywords +@@ -1239,16 +1239,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, diff --git a/0004-RH-don-t-start-without-a-config-file.patch b/0008-RH-don-t-start-without-a-config-file.patch similarity index 97% rename from 0004-RH-don-t-start-without-a-config-file.patch rename to 0008-RH-don-t-start-without-a-config-file.patch index 06522fc..a5b206b 100644 --- a/0004-RH-don-t-start-without-a-config-file.patch +++ b/0008-RH-don-t-start-without-a-config-file.patch @@ -20,7 +20,7 @@ Signed-off-by: Benjamin Marzinski 5 files changed, 20 insertions(+) diff --git a/libmultipath/config.c b/libmultipath/config.c -index 5af7af5..2a9c668 100644 +index 24d71ae..9b6d71e 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c @@ -26,6 +26,7 @@ @@ -31,7 +31,7 @@ index 5af7af5..2a9c668 100644 static int hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2) -@@ -743,6 +744,20 @@ load_config (char * file) +@@ -746,6 +747,20 @@ load_config (char * file) goto out; } factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); @@ -53,7 +53,7 @@ index 5af7af5..2a9c668 100644 conf->processed_main_config = 1; diff --git a/libmultipath/config.h b/libmultipath/config.h -index 7d0cd9a..d7fb8e2 100644 +index b938c26..a871a95 100644 --- a/libmultipath/config.h +++ b/libmultipath/config.h @@ -9,6 +9,7 @@ diff --git a/0005-RH-use-rpm-optflags-if-present.patch b/0009-RH-use-rpm-optflags-if-present.patch similarity index 96% rename from 0005-RH-use-rpm-optflags-if-present.patch rename to 0009-RH-use-rpm-optflags-if-present.patch index d198bd6..4b41d9e 100644 --- a/0005-RH-use-rpm-optflags-if-present.patch +++ b/0009-RH-use-rpm-optflags-if-present.patch @@ -13,10 +13,10 @@ Signed-off-by: Benjamin Marzinski 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index b86cba6..70accd7 100644 +index 2f0bcea..b98800a 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -85,15 +85,23 @@ TEST_CC_OPTION = $(shell \ +@@ -83,15 +83,23 @@ TEST_CC_OPTION = $(shell \ echo "$(2)"; \ fi) diff --git a/0006-RH-add-mpathconf.patch b/0010-RH-add-mpathconf.patch similarity index 99% rename from 0006-RH-add-mpathconf.patch rename to 0010-RH-add-mpathconf.patch index 1e9481b..db4e652 100644 --- a/0006-RH-add-mpathconf.patch +++ b/0010-RH-add-mpathconf.patch @@ -21,10 +21,10 @@ Signed-off-by: Benjamin Marzinski create mode 100644 multipath/mpathconf.8 diff --git a/libmultipath/config.c b/libmultipath/config.c -index 2a9c668..654f330 100644 +index 9b6d71e..be40bbf 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -746,6 +746,8 @@ load_config (char * file) +@@ -749,6 +749,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."); diff --git a/0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/0011-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch similarity index 97% rename from 0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch rename to 0011-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index aaadefe..b1651d7 100644 --- a/0007-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/0011-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -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 f3265ee..37b8e31 100644 +index 5abb118..1481e7f 100644 --- a/multipath/main.c +++ b/multipath/main.c @@ -133,7 +133,7 @@ usage (char * progname) @@ -107,7 +107,7 @@ index f3265ee..37b8e31 100644 " -c check if a device should be a path in a multipath device\n" " -C check if a multipath device has usable paths\n" " -q allow queue_if_no_path when multipathd is not running\n" -@@ -879,7 +881,7 @@ main (int argc, char *argv[]) +@@ -870,7 +872,7 @@ main (int argc, char *argv[]) exit(RTVL_FAIL); multipath_conf = conf; conf->retrigger_tries = 0; @@ -116,7 +116,7 @@ index f3265ee..37b8e31 100644 switch(arg) { case 1: printf("optarg : %s\n",optarg); break; -@@ -949,6 +951,10 @@ main (int argc, char *argv[]) +@@ -940,6 +942,10 @@ main (int argc, char *argv[]) case 'T': cmd = CMD_DUMP_CONFIG; break; diff --git a/0008-RH-warn-on-invalid-regex-instead-of-failing.patch b/0012-RH-warn-on-invalid-regex-instead-of-failing.patch similarity index 93% rename from 0008-RH-warn-on-invalid-regex-instead-of-failing.patch rename to 0012-RH-warn-on-invalid-regex-instead-of-failing.patch index 777cded..db670a3 100644 --- a/0008-RH-warn-on-invalid-regex-instead-of-failing.patch +++ b/0012-RH-warn-on-invalid-regex-instead-of-failing.patch @@ -16,7 +16,7 @@ Signed-off-by: Benjamin Marzinski 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index a81c051..fbef142 100644 +index eaad4f1..95ae09b 100644 --- a/libmultipath/dict.c +++ b/libmultipath/dict.c @@ -58,6 +58,21 @@ set_str(vector strvec, void *ptr) @@ -41,7 +41,7 @@ index a81c051..fbef142 100644 static int set_yes_no(vector strvec, void *ptr) { -@@ -1347,7 +1362,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ +@@ -1374,7 +1389,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ if (!conf->option) \ return 1; \ \ @@ -50,7 +50,7 @@ index a81c051..fbef142 100644 if (!buff) \ return 1; \ \ -@@ -1363,7 +1378,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ +@@ -1390,7 +1405,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ if (!conf->option) \ return 1; \ \ @@ -59,7 +59,7 @@ index a81c051..fbef142 100644 if (!buff) \ return 1; \ \ -@@ -1466,16 +1481,16 @@ device_handler(struct config *conf, vector strvec) +@@ -1493,16 +1508,16 @@ device_handler(struct config *conf, vector strvec) return 0; } diff --git a/0009-RH-reset-default-find_mutipaths-value-to-off.patch b/0013-RH-reset-default-find_mutipaths-value-to-off.patch similarity index 100% rename from 0009-RH-reset-default-find_mutipaths-value-to-off.patch rename to 0013-RH-reset-default-find_mutipaths-value-to-off.patch diff --git a/0014-RH-Fix-nvme-compilation-warning.patch b/0014-RH-Fix-nvme-compilation-warning.patch new file mode 100644 index 0000000..6de061a --- /dev/null +++ b/0014-RH-Fix-nvme-compilation-warning.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Fri, 25 Jan 2019 14:54:56 -0600 +Subject: [PATCH] RH: Fix nvme compilation warning + +Signed-off-by: Benjamin Marzinski +--- + libmultipath/nvme/argconfig.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libmultipath/nvme/argconfig.h b/libmultipath/nvme/argconfig.h +index adb192b..bfd10ef 100644 +--- a/libmultipath/nvme/argconfig.h ++++ b/libmultipath/nvme/argconfig.h +@@ -76,7 +76,7 @@ struct argconfig_commandline_options { + extern "C" { + #endif + +-typedef void argconfig_help_func(); ++typedef void argconfig_help_func(void); + void argconfig_append_usage(const char *str); + void argconfig_print_help(const char *program_desc, + const struct argconfig_commandline_options *options); +-- +2.17.2 + diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index 6c3e89d..86692e5 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,6 +1,6 @@ Name: device-mapper-multipath Version: 0.7.9 -Release: 3.git17a6101%{?dist} +Release: 4.git2df6110%{?dist} Summary: Tools to manage multipath devices using device-mapper License: GPLv2 URL: http://christophe.varoqui.free.fr/ @@ -8,17 +8,22 @@ 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-17a6101.tgz +Source0: multipath-tools-2df6110.tgz Source1: multipath.conf -Patch0001: 0001-libmultipath-dm_is_mpath-cleanup.patch -Patch0002: 0002-RH-fixup-udev-rules-for-redhat.patch -Patch0003: 0003-RH-Remove-the-property-blacklist-exception-builtin.patch -Patch0004: 0004-RH-don-t-start-without-a-config-file.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-warn-on-invalid-regex-instead-of-failing.patch -Patch0009: 0009-RH-reset-default-find_mutipaths-value-to-off.patch +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-RH-fixup-udev-rules-for-redhat.patch +Patch0007: 0007-RH-Remove-the-property-blacklist-exception-builtin.patch +Patch0008: 0008-RH-don-t-start-without-a-config-file.patch +Patch0009: 0009-RH-use-rpm-optflags-if-present.patch +Patch0010: 0010-RH-add-mpathconf.patch +Patch0011: 0011-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +Patch0012: 0012-RH-warn-on-invalid-regex-instead-of-failing.patch +Patch0013: 0013-RH-reset-default-find_mutipaths-value-to-off.patch +Patch0014: 0014-RH-Fix-nvme-compilation-warning.patch # runtime Requires: %{name}-libs = %{version}-%{release} @@ -101,7 +106,7 @@ This package contains the files needed to develop applications that use device-mapper-multipath's libdmmp C API library %prep -%setup -q -n multipath-tools-17a6101 +%setup -q -n multipath-tools-2df6110 %patch0001 -p1 %patch0002 -p1 %patch0003 -p1 @@ -111,6 +116,11 @@ device-mapper-multipath's libdmmp C API library %patch0007 -p1 %patch0008 -p1 %patch0009 -p1 +%patch0010 -p1 +%patch0011 -p1 +%patch0012 -p1 +%patch0013 -p1 +%patch0014 -p1 cp %{SOURCE1} . %build @@ -222,6 +232,22 @@ fi %{_pkgconfdir}/libdmmp.pc %changelog +* Thu Jan 31 2019 Benjamin Marzinski - 0.7.9-4.git2df6110 +- Update Source to latest upstream commit + * previous patch 0001-libmultipath-dm_is_mpath-cleanup.patch is included + in this commit +- Rename files + * Previous patches 0002-0009 are now patches 0006-0013 +- Add 0001-BZ-1668693-disable-user_friendly_names-for-NetApp.patch +- Add 0002-libmultipath-handle-existing-paths-in-marginal_path-.patch +- Add 0003-multipathd-cleanup-marginal-paths-checking-timers.patch +- Add 0004-libmultipath-fix-marginal-paths-queueing-errors.patch +- Add 0005-libmultipath-fix-marginal_paths-nr_active-check.patch + * The above 5 patches have been submitted upstream +- Add 0014-RH-Fix-nvme-compilation-warning.patch + * This change is only necessary because of Red Hat compilation + differences. + * Thu Jan 31 2019 Fedora Release Engineering - 0.7.9-3.git17a6101 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild diff --git a/sources b/sources index ced3d4c..1ea65ab 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (multipath-tools-17a6101.tgz) = 28c75188ac33aeae58457b56aa5890c277a437ee8a4b061ecaa1d766aa040c74e7c94036939edc3f293f6c795cb94c431540e8ac46ef2e81cecac7aef1fa0ac7 +SHA512 (multipath-tools-2df6110.tgz) = 5083e95157d2a978c8f5ed234b9c0fa4eced7bce7d4f28d82479b4fc504fc74b4f00ec78ec0a830a44df01de76a40d33af41bedb0731be2afaccfda1fb9e7d0b SHA512 (multipath.conf) = 71953dce5a68adcf60a942305f5a66023e6f4c4baf53b1bfdb4edf65ed5b8e03db804363c36d1dcfd85591f4766f52b515269904c53b84d7b076da0b80b09942