From 91c21a51b424d0b649630b6e867005e7046dfbf4 Mon Sep 17 00:00:00 2001 From: Benjamin Marzinski Date: Thu, 22 Jan 2026 22:48:57 -0500 Subject: [PATCH] device-mapper-multipath-0.9.9-16 Add 0081-multipathd-make-multipathd-show-status-busy-checker-.patch * Fixes RHEL-136405 ("improve Busy checking for multipathd show status output") Add 0082-multipathd-print-path-offline-message-even-without-a.patch * Fixes RHEL-133815 ("log_checker_err is not printing messages repeatedly for failed path [rhel-10]") Resolves: RHEL-133815 Resolves: RHEL-136405 --- ...multipathd-show-status-busy-checker-.patch | 63 +++++++++++++++++++ ...-path-offline-message-even-without-a.patch | 36 +++++++++++ device-mapper-multipath.spec | 15 ++++- 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 0081-multipathd-make-multipathd-show-status-busy-checker-.patch create mode 100644 0082-multipathd-print-path-offline-message-even-without-a.patch diff --git a/0081-multipathd-make-multipathd-show-status-busy-checker-.patch b/0081-multipathd-make-multipathd-show-status-busy-checker-.patch new file mode 100644 index 0000000..8bdfa10 --- /dev/null +++ b/0081-multipathd-make-multipathd-show-status-busy-checker-.patch @@ -0,0 +1,63 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Wed, 21 Jan 2026 16:03:12 -0500 +Subject: [PATCH] multipathd: make "multipathd show status" busy checker better + +while uevent_listen() was grabbing new uevents, "multipathd show status" +would still show show busy as "False". Add a check there, to make catch +multipathd's uevent processing earlier. Also, access servicing_uev (as +well as the new variable, adding_uev) atomically, just to make sure that +the compiler doesn't do stupid things trying to optimize them. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + libmultipath/uevent.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c +index 32135d7e..7cebf4f3 100644 +--- a/libmultipath/uevent.c ++++ b/libmultipath/uevent.c +@@ -64,6 +64,7 @@ static pthread_cond_t *uev_condp = &uev_cond; + static uev_trigger *my_uev_trigger; + static void *my_trigger_data; + static int servicing_uev; ++static int adding_uev; /* uatomic access only */ + + struct uevent_filter_state { + struct list_head uevq; +@@ -82,13 +83,14 @@ static void reset_filter_state(struct uevent_filter_state *st) + + int is_uevent_busy(void) + { +- int empty, servicing; ++ int empty, servicing, adding; + + pthread_mutex_lock(uevq_lockp); + empty = list_empty(&uevq); + servicing = servicing_uev; ++ adding = uatomic_read(&adding_uev); + pthread_mutex_unlock(uevq_lockp); +- return (!empty || servicing); ++ return (!empty || servicing || adding); + } + + struct uevent * alloc_uevent (void) +@@ -742,6 +744,7 @@ int uevent_listen(struct udev *udev) + int fdcount, events; + struct pollfd ev_poll = { .fd = fd, .events = POLLIN, }; + ++ uatomic_set(&adding_uev, 0); + fdcount = poll(&ev_poll, 1, -1); + if (fdcount < 0) { + if (errno == EINTR) +@@ -751,6 +754,8 @@ int uevent_listen(struct udev *udev) + err = -errno; + break; + } ++ uatomic_set(&adding_uev, 1); ++ + events = uevent_receive_events(fd, &uevlisten_tmp, monitor); + if (events <= 0) + continue; diff --git a/0082-multipathd-print-path-offline-message-even-without-a.patch b/0082-multipathd-print-path-offline-message-even-without-a.patch new file mode 100644 index 0000000..5b385af --- /dev/null +++ b/0082-multipathd-print-path-offline-message-even-without-a.patch @@ -0,0 +1,36 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Marzinski +Date: Wed, 21 Jan 2026 16:03:13 -0500 +Subject: [PATCH] multipathd: print path offline message even without a checker + +If a path has a checker selected and is offline, multipathd will print a +"path offline" message. However if the checker isn't selected, for +instance because multipathd was started or reconfigured while the path +was offline, multipathd was not printing the "path offline" message. +Fix that. + +Signed-off-by: Benjamin Marzinski +Reviewed-by: Martin Wilck +--- + multipathd/main.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/multipathd/main.c b/multipathd/main.c +index 0882ef2a..e9165350 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -95,12 +95,11 @@ mpath_pr_event_handle(struct path *pp, unsigned int nr_keys_needed, + + #define LOG_MSG(lvl, pp) \ + do { \ +- if (pp->mpp && checker_selected(&pp->checker) && \ +- lvl <= libmp_verbosity) { \ ++ if (pp->mpp && lvl <= libmp_verbosity) { \ + if (pp->offline) \ + condlog(lvl, "%s: %s - path offline", \ + pp->mpp->alias, pp->dev); \ +- else { \ ++ else if (checker_selected(&pp->checker)) { \ + const char *__m = \ + checker_message(&pp->checker); \ + \ diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec index ea93a2e..c3f9437 100644 --- a/device-mapper-multipath.spec +++ b/device-mapper-multipath.spec @@ -1,6 +1,6 @@ Name: device-mapper-multipath Version: 0.9.9 -Release: 15%{?dist} +Release: 16%{?dist} Summary: Tools to manage multipath devices using device-mapper License: GPLv2 URL: http://christophe.varoqui.free.fr/ @@ -90,6 +90,8 @@ Patch0077: 0077-multipathd-Fix-tracking-of-old-PR-key.patch Patch0078: 0078-multipathd-Fix-race-while-registering-PR-key.patch Patch0079: 0079-mpathpersist-Fix-REPORT-CAPABILITIES-output.patch Patch0080: 0080-multipath-tools-update-NFINIDAT-InfiniBox-config-in-.patch +Patch0081: 0081-multipathd-make-multipathd-show-status-busy-checker-.patch +Patch0082: 0082-multipathd-print-path-offline-message-even-without-a.patch # runtime Requires: %{name}-libs = %{version}-%{release} @@ -299,6 +301,17 @@ fi %{_pkgconfdir}/libdmmp.pc %changelog +* Thu Jan 22 2026 Benjamin Marzinski - 0.9.9-16 +- Add 0081-multipathd-make-multipathd-show-status-busy-checker-.patch + * Fixes RHEL-136405 ("improve Busy checking for multipathd show status + output") +- Add 0082-multipathd-print-path-offline-message-even-without-a.patch + * Fixes RHEL-133815 ("log_checker_err is not printing messages + repeatedly for failed path [rhel-10]") +- Resolves: RHEL-133815 +- Resolves: RHEL-136405 + + * Wed Nov 19 2025 Benjamin Marzinski - 0.9.9-15 - Add 0080-multipath-tools-update-NFINIDAT-InfiniBox-config-in-.patch * Fixes RHEL-128338 ("Update the multipath.conf stanza for Infinidat