Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package multipath-tools for openSUSE:Factory 
checked in at 2025-03-06 14:48:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/multipath-tools (Old)
 and      /work/SRC/openSUSE:Factory/.multipath-tools.new.19136 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "multipath-tools"

Thu Mar  6 14:48:01 2025 rev:170 rq:1250442 version:0.11.0+183+suse.3973293

Changes:
--------
--- /work/SRC/openSUSE:Factory/multipath-tools/multipath-tools.changes  
2025-01-25 19:10:28.767733164 +0100
+++ 
/work/SRC/openSUSE:Factory/.multipath-tools.new.19136/multipath-tools.changes   
    2025-03-06 14:48:13.840186443 +0100
@@ -1,0 +2,19 @@
+Wed Mar  5 14:33:08 UTC 2025 - Martin Wilck <mwi...@suse.com>
+
+- Update to version 0.11.0+183+suse.3973293:
+  * multipathd: fix hang during shutdown with queuing maps
+    (bsc#1238484).
+    This adds multipathd-queueing.service.
+  * multipath-tools: make multipathd listen on a pathname socket
+    (/run/multipathd.socket) besides listening on an abstract socket.
+    This allows connecting to multipathd from a containerized application
+    (gh#opensvc/multipath-tools#111). In client mode, applications
+    linked against libmpathcmd will attempt to connect to the pathname
+    socket first, and to the abstract socket if this fails.
+    The MULTIPATH_SOCKET_NAME environment variable can be used to
+    override the socket name.
+  * multipathd: trigger uevents for blacklisted paths in reconfigure
+    (bsc#1236321)
+  * libmultipath: remove buggy reinstate_paths function
+
+-------------------------------------------------------------------

Old:
----
  multipath-tools-0.11.0+164+suse.24eeee7.obscpio

New:
----
  multipath-tools-0.11.0+183+suse.3973293.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ multipath-tools.spec ++++++
--- /var/tmp/diff_new_pack.C8LMJk/_old  2025-03-06 14:48:16.568300850 +0100
+++ /var/tmp/diff_new_pack.C8LMJk/_new  2025-03-06 14:48:16.588301689 +0100
@@ -35,7 +35,7 @@
 %define libdmmp_version %(echo %{_libdmmp_version} | tr . _)
 
 Name:           multipath-tools
-Version:        0.11.0+164+suse.24eeee7
+Version:        0.11.0+183+suse.3973293
 Release:        0
 Summary:        Tools to Manage Multipathed Devices with the device-mapper
 License:        GPL-2.0-only AND GPL-3.0-or-later
@@ -198,12 +198,12 @@
 
 %pre
 [ -f /.buildenv ] && exit 0
-%service_add_pre multipathd.socket multipathd.service
+%service_add_pre multipathd.socket multipathd.service 
multipathd-queueing.service
 
 %post
 [ -f /.buildenv ] && exit 0
 %tmpfiles_create %{_tmpfilesdir}/multipath.conf
-%service_add_post multipathd.socket multipathd.service
+%service_add_post multipathd.socket multipathd.service 
multipathd-queueing.service
 if [ $1 -eq 1 ]; then
     [ ! -x /sbin/modprobe ] || /sbin/modprobe dm_multipath || true
 fi
@@ -211,12 +211,12 @@
 exit 0
 
 %preun
-%service_del_preun multipathd.service multipathd.socket
+%service_del_preun multipathd.service multipathd.socket 
multipathd-queueing.service
 
 %postun
 %{?regenerate_initrd_post}
 %service_del_postun multipathd.service
-%service_del_postun_without_restart multipathd.socket
+%service_del_postun_without_restart multipathd.socket 
multipathd-queueing.service
 
 %posttrans
 %{?regenerate_initrd_posttrans}
@@ -237,6 +237,7 @@
 /usr/sbin/rcmultipathd
 %endif
 %{_unitdir}/multipathd.service
+%{_unitdir}/multipathd-queueing.service
 %{_unitdir}/multipathd.socket
 %if 0%{?suse_version} < 1550 && 0%{?sle_version} < 150300
 %dir /usr/lib/modules-load.d

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.C8LMJk/_old  2025-03-06 14:48:16.956317122 +0100
+++ /var/tmp/diff_new_pack.C8LMJk/_new  2025-03-06 14:48:16.992318632 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/openSUSE/multipath-tools.git</param>
-              <param 
name="changesrevision">24eeee77ef43bd4fee19f1eca07036874cda2859</param></service></servicedata>
+              <param 
name="changesrevision">397329364d2e192b2538a9157cac3a77bd40fac0</param></service></servicedata>
 (No newline at EOF)
 

++++++ multipath-tools-0.11.0+164+suse.24eeee7.obscpio -> 
multipath-tools-0.11.0+183+suse.3973293.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/actions/spelling/expect.txt 
new/multipath-tools-0.11.0+183+suse.3973293/.github/actions/spelling/expect.txt
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/actions/spelling/expect.txt 
    2025-01-24 15:03:15.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/.github/actions/spelling/expect.txt 
    2025-03-04 23:53:22.000000000 +0100
@@ -142,6 +142,7 @@
 Nosync
 nvme
 OBJDEPS
+oneshot
 ontap
 OOM
 opensvc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/multiarch-stable.yaml
 
new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/multiarch-stable.yaml
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/multiarch-stable.yaml
 2025-01-24 15:03:15.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/multiarch-stable.yaml
 2025-03-04 23:53:22.000000000 +0100
@@ -46,7 +46,9 @@
       - name: checkout
         uses: actions/checkout@v4
       - name: enable foreign arch
-        uses: dbhi/qus/action@main
+        uses: docker/setup-qemu-action@v2
+        with:
+          image: tonistiigi/binfmt:latest
       - name: compile and run unit tests
         uses: mosteo-actions/docker-run@v1
         with:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/multiarch.yaml 
new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/multiarch.yaml
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/multiarch.yaml    
    2025-01-24 15:03:15.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/multiarch.yaml    
    2025-03-04 23:53:22.000000000 +0100
@@ -51,7 +51,9 @@
       - name: checkout
         uses: actions/checkout@v4
       - name: enable foreign arch
-        uses: dbhi/qus/action@main
+        uses: docker/setup-qemu-action@v2
+        with:
+          image: tonistiigi/binfmt:latest
       - name: compile and run unit tests
         uses: mosteo-actions/docker-run@v1
         with:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/sles.yaml 
new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/sles.yaml
--- old/multipath-tools-0.11.0+164+suse.24eeee7/.github/workflows/sles.yaml     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/.github/workflows/sles.yaml     
2025-03-04 23:53:22.000000000 +0100
@@ -52,7 +52,9 @@
       - name: checkout
         uses: actions/checkout@v1
       - name: enable foreign arch
-        run: sudo docker run --rm --privileged multiarch/qemu-user-static 
--reset -p yes
+        uses: docker/setup-qemu-action@v2
+        with:
+          image: tonistiigi/binfmt:latest
       - name: build and run unit tests
         # Github actions doesn't support referencing docker images with
         # context variables. Workaround: use mosteo-actions/docker-run action
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/multipath-tools-0.11.0+164+suse.24eeee7/.gitignore 
new/multipath-tools-0.11.0+183+suse.3973293/.gitignore
--- old/multipath-tools-0.11.0+164+suse.24eeee7/.gitignore      2025-01-24 
15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/.gitignore      2025-03-04 
23:53:22.000000000 +0100
@@ -24,6 +24,7 @@
 multipathd/multipathd.8
 multipathd/multipathc
 multipathd/multipathd.service
+multipathd/multipathd.socket
 mpathpersist/mpathpersist
 mpathpersist/mpathpersist.8
 abi.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/multipath-tools-0.11.0+164+suse.24eeee7/Makefile.inc 
new/multipath-tools-0.11.0+183+suse.3973293/Makefile.inc
--- old/multipath-tools-0.11.0+164+suse.24eeee7/Makefile.inc    2025-01-24 
15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/Makefile.inc    2025-03-04 
23:53:22.000000000 +0100
@@ -79,6 +79,9 @@
 kernel_incdir  := /usr/include
 sysdir_bin      := $(sys_execprefix)bin
 
+abstract_socket := @/org/kernel/linux/storage/multipathd
+pathname_socket := /run/multipathd.socket
+
 ifeq ($(V),)
 Q              := @
 # make's "Entering directory" messages are confusing in parallel mode
@@ -114,8 +117,11 @@
                   -DBIN_DIR=\"$(bindir)\" 
-DMULTIPATH_DIR=\"$(TGTDIR)$(plugindir)\" \
                   -DRUNTIME_DIR=\"$(runtimedir)\" 
-DCONFIG_DIR=\"$(TGTDIR)$(configdir)\" \
                   -DDEFAULT_CONFIGFILE=\"$(TGTDIR)$(configfile)\" 
-DSTATE_DIR=\"$(TGTDIR)$(statedir)\" \
-                  -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP
-CFLAGS         := -std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
+                  -DEXTRAVERSION=\"$(EXTRAVERSION)\" \
+                  -DABSTRACT_SOCKET=\"$(abstract_socket)\" 
-DPATHNAME_SOCKET=\"$(pathname_socket)\" \
+                  -DWSTRINGOP_TRUNCATION=$(if $(WSTRINGOP_TRUNCATION),1,0) \
+                  -MMD -MP
+CFLAGS         := -std=$(C_STD) $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
                   -fexceptions
 BIN_CFLAGS     := -fPIE -DPIE
 LIB_CFLAGS     := -fPIC
@@ -167,4 +173,6 @@
                -e 's:@SYSDIR_BIN@:'$(sysdir_bin)': g' \
                -e 's:@RUNTIME_DIR@:'$(runtimedir)':g' \
                -e 's/@MODPROBE_UNIT@/'$(MODPROBE_UNIT)'/g' \
+               -e 's,@ABSTRACT_SOCKET@,'$(abstract_socket)',g' \
+               -e 's,@PATHNAME_SOCKET@,'$(pathname_socket)',g' \
                $< >$@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/create-config.mk 
new/multipath-tools-0.11.0+183+suse.3973293/create-config.mk
--- old/multipath-tools-0.11.0+164+suse.24eeee7/create-config.mk        
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/create-config.mk        
2025-03-04 23:53:22.000000000 +0100
@@ -157,6 +157,18 @@
                echo "-D_FORTIFY_SOURCE=2"; \
        fi)
 
+# Check is you can compile with the urcu.h header, using the C99 standard.
+# If urcu/config-<arch>.h defines CONFIG_RCU_USE_ATOMIC_BUILTINS, then anything
+# including urcu.h must be compiled with at least the C11 standard. See:
+# 
https://github.com/urcu/userspace-rcu/commit/89280d020bf064d1055c360fb9974f128051043f
+C_STD := $(shell \
+       if printf '$(__HASH__)include <urcu.h>\nint main(void) { return 0; }\n' 
| $(CC) -o /dev/null -c -xc --std=gnu99 - 2>/dev/null; \
+       then \
+               echo "gnu99"; \
+       else \
+               echo "gnu11"; \
+       fi)
+
 STACKPROT :=
 
 all:   $(TOPDIR)/config.mk
@@ -179,6 +191,8 @@
        @echo "ERROR_DISCARDED_QUALIFIERS := $(call 
TEST_CC_OPTION,-Werror=discarded-qualifiers,)" >>$@
        @echo "WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered 
-Wno-error=clobbered,)" >>$@
        @echo "WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)" 
>>$@
+       @echo "WSTRINGOP_TRUNCATION := $(call 
TEST_CC_OPTION,-Wstringop-truncation)" >>$@
        @echo "W_MISSING_INITIALIZERS := $(call TEST_MISSING_INITIALIZERS)" >>$@
        @echo "W_URCU_TYPE_LIMITS := $(call TEST_URCU_TYPE_LIMITS)" >>$@
        @echo "ENABLE_LIBDMMP := $(ENABLE_LIBDMMP)" >>$@
+       @echo "C_STD := $(C_STD)" >>$@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_cmd.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_cmd.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_cmd.c 
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_cmd.c 
2025-03-04 23:53:22.000000000 +0100
@@ -20,15 +20,18 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <poll.h>
+#include <stddef.h>
 #include <string.h>
 #include <errno.h>
 #include <fcntl.h>
 
 #include "mpath_cmd.h"
+#include "mpath_fill_sockaddr.c"
 
 /*
  * keep reading until its all read
@@ -100,15 +103,11 @@
        size_t len;
        struct sockaddr_un addr;
        int flags = 0;
+       const char *const names[2] = {PATHNAME_SOCKET, ABSTRACT_SOCKET};
+       int name_idx = 0;
+       const char *env_name = getenv("MULTIPATH_SOCKET_NAME"), *name;
 
-       memset(&addr, 0, sizeof(addr));
-       addr.sun_family = AF_LOCAL;
-       addr.sun_path[0] = '\0';
-       strncpy(&addr.sun_path[1], DEFAULT_SOCKET, sizeof(addr.sun_path) - 1);
-       len = strlen(DEFAULT_SOCKET) + 1 + sizeof(sa_family_t);
-       if (len > sizeof(struct sockaddr_un))
-               len = sizeof(struct sockaddr_un);
-
+retry:
        fd = socket(AF_LOCAL, SOCK_STREAM, 0);
        if (fd == -1)
                return -1;
@@ -119,12 +118,18 @@
                        (void)fcntl(fd, F_SETFL, flags|O_NONBLOCK);
        }
 
+       name = env_name ? env_name : names[name_idx];
+       len = mpath_fill_sockaddr__(&addr, name);
        if (connect(fd, (struct sockaddr *)&addr, len) == -1) {
                int err = errno;
 
                close(fd);
-               errno = err;
-               return -1;
+               if (name != env_name && ++name_idx == 1)
+                       goto retry;
+               else {
+                       errno = err;
+                       return -1;
+               }
        }
 
        if (nonblocking && flags != -1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_cmd.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_cmd.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_cmd.h 
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_cmd.h 
2025-03-04 23:53:22.000000000 +0100
@@ -30,7 +30,6 @@
 extern "C" {
 #endif
 
-#define DEFAULT_SOCKET         "/org/kernel/linux/storage/multipathd"
 #define DEFAULT_REPLY_TIMEOUT  4000
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_fill_sockaddr.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_fill_sockaddr.c
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathcmd/mpath_fill_sockaddr.c   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/libmpathcmd/mpath_fill_sockaddr.c   
    2025-03-04 23:53:22.000000000 +0100
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2025 SUSE LLC
+ * SPDX-license-identifier: LGPL-2.1-or-newer
+ */
+
+static size_t mpath_fill_sockaddr__(struct sockaddr_un *addr, const char *name)
+{
+       size_t len;
+
+       addr->sun_family = AF_LOCAL;
+
+       if (name[0] != '@') {
+               /* Pathname socket. This should be NULL-terminated. */
+               strncpy(&addr->sun_path[0], name, sizeof(addr->sun_path) - 1);
+               addr->sun_path[sizeof(addr->sun_path) - 1] = '\0';
+               len = offsetof(struct sockaddr_un, sun_path) + strlen(name) + 1;
+       } else {
+               addr->sun_path[0] = '\0';
+               /*
+                * The abstract socket's name doesn't need to be NULL 
terminated.
+                * Actually, a trailing NULL would be considered part of the 
socket name.
+                */
+#pragma GCC diagnostic push
+#if WSTRINGOP_TRUNCATION
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
+#endif
+               strncpy(&addr->sun_path[1], &name[1], sizeof(addr->sun_path) - 
1);
+#pragma GCC diagnostic pop
+               len = offsetof(struct sockaddr_un, sun_path) + strlen(name);
+       }
+       return len > sizeof(*addr) ? sizeof(*addr) : len;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathutil/uxsock.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmpathutil/uxsock.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmpathutil/uxsock.c   
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmpathutil/uxsock.c   
2025-03-04 23:53:22.000000000 +0100
@@ -6,12 +6,15 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <stdarg.h>
+#include <stddef.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <sys/stat.h>
 #include <sys/un.h>
 #include <poll.h>
 #include <signal.h>
@@ -33,6 +36,8 @@
 static int _recv_packet(int fd, char **buf, unsigned int timeout,
                        ssize_t limit);
 
+#include "../libmpathcmd/mpath_fill_sockaddr.c"
+
 /*
  * create a unix domain socket and start listening on it
  * return a file descriptor open on the socket
@@ -41,43 +46,33 @@
 {
        int fd;
        size_t len;
-#ifdef USE_SYSTEMD
-       int num;
-#endif
        struct sockaddr_un addr;
 
-#ifdef USE_SYSTEMD
-       num = sd_listen_fds(0);
-       if (num > 1) {
-               condlog(3, "sd_listen_fds returned %d fds", num);
-               return -1;
-       } else if (num == 1) {
-               fd = SD_LISTEN_FDS_START + 0;
-               condlog(3, "using fd %d from sd_listen_fds", fd);
-               return fd;
-       }
-#endif
+       /* This is after the PID check, so unlinking should be fine */
+       if (name[0] != '@' && unlink(name) == -1 && errno != ENOENT)
+               condlog(1, "Failed to unlink %s", name);
+
        fd = socket(AF_LOCAL, SOCK_STREAM, 0);
        if (fd == -1) {
                condlog(3, "Couldn't create ux_socket, error %d", errno);
                return -1;
        }
 
-       memset(&addr, 0, sizeof(addr));
-       addr.sun_family = AF_LOCAL;
-       addr.sun_path[0] = '\0';
-       len = strlen(name) + 1;
-       if (len >= sizeof(addr.sun_path))
-               len = sizeof(addr.sun_path) - 1;
-       memcpy(&addr.sun_path[1], name, len);
-
-       len += sizeof(sa_family_t);
+       len = mpath_fill_sockaddr__(&addr, name);
        if (bind(fd, (struct sockaddr *)&addr, len) == -1) {
                condlog(3, "Couldn't bind to ux_socket, error %d", errno);
                close(fd);
                return -1;
        }
 
+       /*
+        * Socket needs to have rw permissions for everone.
+        * SO_PEERCRED makes sure that only root can modify things.
+        */
+       if (name[0] != '@' &&
+           chmod(name, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | 
S_IWOTH) == -1)
+               condlog(3, "failed to set permissions on %s: %s", name, 
strerror(errno));
+
        if (listen(fd, 10) == -1) {
                condlog(3, "Couldn't listen to ux_socket, error %d", errno);
                close(fd);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/checkers/tur.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/checkers/tur.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/checkers/tur.c     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/checkers/tur.c     
2025-03-04 23:53:22.000000000 +0100
@@ -15,6 +15,7 @@
 #include <errno.h>
 #include <sys/time.h>
 #include <pthread.h>
+#include <urcu.h>
 #include <urcu/uatomic.h>
 
 #include "checkers.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/configure.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/configure.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/configure.c        
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/configure.c        
2025-03-04 23:53:22.000000000 +0100
@@ -805,35 +805,6 @@
        return;
 }
 
-int reinstate_paths(struct multipath *mpp)
-{
-       int i, j;
-       struct pathgroup * pgp;
-       struct path * pp;
-
-       if (!mpp->pg)
-               return 0;
-
-       vector_foreach_slot (mpp->pg, pgp, i) {
-               if (!pgp->paths)
-                       continue;
-
-               vector_foreach_slot (pgp->paths, pp, j) {
-                       if (pp->state != PATH_UP &&
-                           (pgp->status == PGSTATE_DISABLED ||
-                            pgp->status == PGSTATE_ACTIVE))
-                               continue;
-
-                       if (pp->dmstate == PSTATE_FAILED) {
-                               if (dm_reinstate_path(mpp->alias, pp->dev_t))
-                                       condlog(0, "%s: error reinstating",
-                                               pp->dev);
-                       }
-               }
-       }
-       return 0;
-}
-
 static int
 lock_multipath (struct multipath * mpp, int lock)
 {
@@ -944,12 +915,6 @@
        case ACT_SWITCHPG:
        case ACT_SWITCHPG_RENAME:
                dm_switchgroup(mpp->alias, mpp->bestpg);
-               /*
-                * we may have avoided reinstating paths because there where in
-                * active or disabled PG. Now that the topology has changed,
-                * retry.
-                */
-               reinstate_paths(mpp);
                return DOMAP_EXIST;
 
        case ACT_CREATE:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/configure.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/configure.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/configure.h        
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/configure.h        
2025-03-04 23:53:22.000000000 +0100
@@ -56,7 +56,6 @@
 void select_action (struct multipath *mpp, const struct vector_s *curmp,
                    int force_reload);
 int domap (struct multipath * mpp, char * params, int is_daemon);
-int reinstate_paths (struct multipath *mpp);
 int coalesce_paths (struct vectors *vecs, vector curmp, char * refwwid, int 
force_reload, enum mpath_cmds cmd);
 int get_refwwid (enum mpath_cmds cmd, const char *dev, enum devtypes dev_type,
                 vector pathvec, char **wwid);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/defaults.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/defaults.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/defaults.h 
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/defaults.h 
2025-03-04 23:53:22.000000000 +0100
@@ -67,7 +67,6 @@
 #define DEV_LOSS_TMO_UNSET     0U
 #define MAX_DEV_LOSS_TMO       UINT_MAX
 #define DEFAULT_PIDFILE                RUNTIME_DIR "/multipathd.pid"
-#define DEFAULT_SOCKET         "/org/kernel/linux/storage/multipathd"
 #define DEFAULT_BINDINGS_FILE  STATE_DIR "/bindings"
 #define DEFAULT_WWIDS_FILE     STATE_DIR "/wwids"
 #define DEFAULT_PRKEYS_FILE    STATE_DIR "/prkeys"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/discovery.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/discovery.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/discovery.h        
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/discovery.h        
2025-03-04 23:53:22.000000000 +0100
@@ -74,6 +74,7 @@
        DI_BLACKLIST__,
        DI_NOIO__,
        DI_NOFALLBACK__,
+       DI_DISCOVERY__,
 };
 
 #define DI_SYSFS       (1 << DI_SYSFS__)
@@ -84,6 +85,7 @@
 #define DI_BLACKLIST   (1 << DI_BLACKLIST__)
 #define DI_NOIO                (1 << DI_NOIO__) /* Avoid IO on the device */
 #define DI_NOFALLBACK  (1 << DI_NOFALLBACK__) /* do not allow wwid fallback */
+#define DI_DISCOVERY   (1 << DI_DISCOVERY__) /* set only during map discovery 
*/
 
 #define DI_ALL         (DI_SYSFS  | DI_IOCTL | DI_CHECKER | DI_PRIO | DI_WWID)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/libmultipath.version 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/libmultipath.version
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/libmultipath.version   
    2025-01-24 15:03:15.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/libmultipath.version   
    2025-03-04 23:53:22.000000000 +0100
@@ -153,7 +153,6 @@
        print_all_paths;
        print_foreign_topology;
        print_multipath_topology__;
-       reinstate_paths;
        remember_wwid;
        remove_feature;
        remove_map;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/lock.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/lock.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/lock.h     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/lock.h     
2025-03-04 23:53:22.000000000 +0100
@@ -2,6 +2,7 @@
 #define LOCK_H_INCLUDED
 
 #include <pthread.h>
+#include <urcu.h>
 #include <urcu/uatomic.h>
 #include <stdbool.h>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/structs_vec.c 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/structs_vec.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/structs_vec.c      
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/structs_vec.c      
2025-03-04 23:53:22.000000000 +0100
@@ -107,6 +107,9 @@
        bool mpp_has_wwid;
        bool must_reload = false;
        bool pg_deleted = false;
+       bool map_discovery = !!(pathinfo_flags & DI_DISCOVERY);
+
+       pathinfo_flags &= ~DI_DISCOVERY;
 
        if (!mpp->pg)
                return;
@@ -193,7 +196,8 @@
                                        rc = pathinfo(pp, conf,
                                                      
DI_SYSFS|DI_WWID|DI_BLACKLIST|DI_NOFALLBACK|pathinfo_flags);
                                        pthread_cleanup_pop(1);
-                                       if (rc != PATHINFO_OK) {
+                                       if (rc == PATHINFO_FAILED ||
+                                           (rc == PATHINFO_SKIPPED && 
!map_discovery)) {
                                                condlog(1, "%s: error %d in 
pathinfo, discarding path",
                                                        pp->dev, rc);
                                                vector_del_slot(pgp->paths, 
j--);
@@ -726,7 +730,7 @@
 }
 
 void
-sync_map_state(struct multipath *mpp)
+sync_map_state(struct multipath *mpp, bool reinstate_only)
 {
        struct pathgroup *pgp;
        struct path *pp;
@@ -748,7 +752,8 @@
                             pp->dmstate == PSTATE_UNDEF) &&
                            (pp->state == PATH_UP || pp->state == PATH_GHOST))
                                dm_reinstate_path(mpp->alias, pp->dev_t);
-                       else if ((pp->dmstate == PSTATE_ACTIVE ||
+                       else if (!reinstate_only &&
+                                (pp->dmstate == PSTATE_ACTIVE ||
                                  pp->dmstate == PSTATE_UNDEF) &&
                                 (pp->state == PATH_DOWN ||
                                  pp->state == PATH_SHAKY)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/structs_vec.h 
new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/structs_vec.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/libmultipath/structs_vec.h      
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/libmultipath/structs_vec.h      
2025-03-04 23:53:22.000000000 +0100
@@ -27,7 +27,7 @@
 void remove_map_by_alias(const char *alias, struct vectors * vecs);
 void remove_maps (struct vectors * vecs);
 
-void sync_map_state (struct multipath *);
+void sync_map_state (struct multipath *mpp, bool reinstate_only);
 struct multipath * add_map_with_path (struct vectors * vecs,
                                      struct path * pp, int add_vec,
                                      const struct multipath *current_mpp);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipath/main.c 
new/multipath-tools-0.11.0+183+suse.3973293/multipath/main.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipath/main.c        
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipath/main.c        
2025-03-04 23:53:22.000000000 +0100
@@ -210,7 +210,7 @@
                        print_multipath_topology(mpp, libmp_verbosity);
 
                if (cmd == CMD_CREATE)
-                       reinstate_paths(mpp);
+                       sync_map_state(mpp, true);
        }
 
        if (cmd == CMD_LIST_SHORT || cmd == CMD_LIST_LONG)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/Makefile 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/Makefile
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/Makefile     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/Makefile     
2025-03-04 23:53:22.000000000 +0100
@@ -41,7 +41,7 @@
 OBJS += fpin_handlers.o
 endif
 
-all : $(EXEC) $(CLI) $(MANPAGES) $(EXEC).service
+all : $(EXEC) $(CLI) $(MANPAGES) $(EXEC).service $(EXEC).socket 
$(EXEC)-queueing.service
 
 $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
        @echo building $@ because of $?
@@ -64,6 +64,7 @@
 ifdef SYSTEMD
        $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(unitdir)
        $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).service $(DESTDIR)$(unitdir)
+       $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC)-queueing.service 
$(DESTDIR)$(unitdir)
        $(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).socket $(DESTDIR)$(unitdir)
 endif
        $(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8
@@ -74,11 +75,12 @@
        $(Q)$(RM) $(DESTDIR)$(bindir)/$(EXEC) $(DESTDIR)$(bindir)/$(CLI)
        $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8
        $(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(CLI).8
+       $(Q)$(RM) $(DESTDIR)$(unitdir)/$(EXEC)-queueing.service
        $(Q)$(RM) $(DESTDIR)$(unitdir)/$(EXEC).service
        $(Q)$(RM) $(DESTDIR)$(unitdir)/$(EXEC).socket
 
 clean: dep_clean
-       $(Q)$(RM) core *.o $(EXEC) $(CLI) $(MANPAGES) $(EXEC).service
+       $(Q)$(RM) core *.o $(EXEC) $(CLI) $(MANPAGES) $(EXEC).service 
$(EXEC)-queueing.service $(EXEC).socket
 
 include $(wildcard $(OBJS:.o=.d) $(CLI_OBJS:.o=.d))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/main.c 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/main.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/main.c       
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/main.c       
2025-03-04 23:53:22.000000000 +0100
@@ -688,7 +688,7 @@
        if (setup_multipath(vecs, mpp))
                return 1;
 
-       sync_map_state(mpp);
+       sync_map_state(mpp, false);
 
        if (mpp->prflag != PRFLAG_SET)
                update_map_pr(mpp);
@@ -806,7 +806,7 @@
        struct multipath *mpp;
 
        vector_foreach_slot (mpvec, mpp, i)
-               sync_map_state(mpp);
+               sync_map_state(mpp, false);
 }
 
 int
@@ -1344,7 +1344,7 @@
        if (setup_multipath(vecs, mpp))
                goto fail; /* if setup_multipath fails, it removes the map */
 
-       sync_map_state(mpp);
+       sync_map_state(mpp, false);
 
        if (retries >= 0) {
                if (start_waiter)
@@ -1464,7 +1464,7 @@
                strlcpy(devt, pp->dev_t, sizeof(devt));
                if (setup_multipath(vecs, mpp))
                        return REMOVE_PATH_MAP_ERROR;
-               sync_map_state(mpp);
+               sync_map_state(mpp, false);
 
                if (retval == REMOVE_PATH_SUCCESS)
                        condlog(2, "%s: path removed from map %s",
@@ -1558,7 +1558,7 @@
 out:
        if (setup_multipath(vecs, mpp) != 0)
                return 2;
-       sync_map_state(mpp);
+       sync_map_state(mpp, false);
 
        return ret;
 }
@@ -1755,7 +1755,7 @@
                return 1;
 
        vector_foreach_slot (vecs->mpvec, mpp, i)
-               if (update_multipath_table(mpp, vecs->pathvec, 0) != DMP_OK) {
+               if (update_multipath_table(mpp, vecs->pathvec, DI_DISCOVERY) != 
DMP_OK) {
                        remove_map(mpp, vecs->pathvec, vecs->mpvec);
                        i--;
                }
@@ -1863,17 +1863,55 @@
        pthread_cleanup_pop(1);
        return NULL;
 }
+
+#ifdef USE_SYSTEMD
+static int get_systemd_sockets(long *ux_sock)
+{
+       int num = sd_listen_fds(0);
+
+       if (num > 2) {
+               condlog(3, "sd_listen_fds returned %d fds", num);
+               return -1;
+       } else if (num == 2) {
+               ux_sock[0] = SD_LISTEN_FDS_START + 0;
+               ux_sock[1] = SD_LISTEN_FDS_START + 1;
+               condlog(3, "using fd %ld and %ld from sd_listen_fds", 
ux_sock[0], ux_sock[1]);
+       } else if (num == 1) {
+               ux_sock[0] = SD_LISTEN_FDS_START + 0;
+               condlog(3, "using fd %ld from sd_listen_fds", ux_sock[0]);
+       }
+       return num;
+}
+#else
+static int get_systemd_sockets(long *ux_sock __attribute__((unused)))
+{
+       return 0;
+}
+#endif
+
+
 static void *
 uxlsnrloop (void * ap)
 {
-       long ux_sock;
+       long ux_sock[2] = {-1, -1};
+       int num;
+       const char *env_name = getenv("MULTIPATH_SOCKET_NAME");
 
        pthread_cleanup_push(rcu_unregister, NULL);
        rcu_register_thread();
 
-       ux_sock = ux_socket_listen(DEFAULT_SOCKET);
-       if (ux_sock == -1) {
-               condlog(1, "could not create uxsock: %d", errno);
+       num = get_systemd_sockets(ux_sock);
+       if (num < 1 && env_name != NULL) {
+               ux_sock[0] = ux_socket_listen(env_name);
+               num = 1;
+       }
+       if (num < 1) {
+               ux_sock[0] = ux_socket_listen(ABSTRACT_SOCKET);
+               ux_sock[1] = ux_socket_listen(PATHNAME_SOCKET);
+               num = 2;
+       }
+       if (ux_sock[0] == -1 && ux_sock[1] == -1) {
+               condlog(1, "could not create sockets: %d", errno);
                exit_daemon();
                goto out;
        }
@@ -1898,7 +1936,7 @@
               == DAEMON_CONFIGURE)
                handle_signals(false);
 
-       uxsock_listen(ux_sock, ap);
+       uxsock_listen(num, ux_sock, ap);
 
 out_sock:
        pthread_cleanup_pop(1); /* uxsock_cleanup */
@@ -2236,7 +2274,7 @@
                ret = 1;
        if (setup_multipath(vecs, mpp) != 0)
                return 2;
-       sync_map_state(mpp);
+       sync_map_state(mpp, false);
 
        return ret;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd-queueing.service.in
 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd-queueing.service.in
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd-queueing.service.in
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd-queueing.service.in
       2025-03-04 23:53:22.000000000 +0100
@@ -0,0 +1,9 @@
+[Unit]
+Description=Enable queuing for multipath maps
+After=local-fs.target remote-fs.target multipathd.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/bin/true
+ExecStop=@BINDIR@/multipathd disablequeueing maps
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.service.in 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.service.in
--- 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.service.in    
    2025-01-24 15:03:15.000000000 +0100
+++ 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.service.in    
    2025-03-04 23:53:22.000000000 +0100
@@ -2,7 +2,7 @@
 Description=Device-Mapper Multipath Device Controller
 Before=lvm2-activation-early.service
 Before=local-fs-pre.target blk-availability.service shutdown.target
-Wants=systemd-udevd-kernel.socket @MODPROBE_UNIT@
+Wants=systemd-udevd-kernel.socket multipathd-queueing.service @MODPROBE_UNIT@
 After=systemd-udevd-kernel.socket @MODPROBE_UNIT@
 After=multipathd.socket systemd-remount-fs.service
 Before=initrd-cleanup.service
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.socket 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.socket
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.socket    
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.socket    
1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-[Unit]
-Description=multipathd control socket
-DefaultDependencies=no
-ConditionKernelCommandLine=!nompath
-ConditionKernelCommandLine=!multipath=off
-ConditionVirtualization=!container
-Before=sockets.target
-
-[Socket]
-ListenStream=@/org/kernel/linux/storage/multipathd
-
-[Install]
-# Socket activation for multipathd is disabled by default.
-# Activate it here if you find it useful.
-# WantedBy=sockets.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.socket.in 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.socket.in
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/multipathd.socket.in 
1970-01-01 01:00:00.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/multipathd.socket.in 
2025-03-04 23:53:22.000000000 +0100
@@ -0,0 +1,16 @@
+[Unit]
+Description=multipathd control socket
+DefaultDependencies=no
+ConditionKernelCommandLine=!nompath
+ConditionKernelCommandLine=!multipath=off
+ConditionVirtualization=!container
+Before=sockets.target
+
+[Socket]
+ListenStream=@ABSTRACT_SOCKET@
+ListenStream=@PATHNAME_SOCKET@
+
+[Install]
+# Socket activation for multipathd is disabled by default.
+# Activate it here if you find it useful.
+# WantedBy=sockets.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/uxlsnr.c 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/uxlsnr.c
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/uxlsnr.c     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/uxlsnr.c     
2025-03-04 23:53:22.000000000 +0100
@@ -69,7 +69,8 @@
 
 /* Indices for array of poll fds */
 enum {
-       POLLFD_UX = 0,
+       POLLFD_UX1 = 0,
+       POLLFD_UX2,
        POLLFD_NOTIFY,
        POLLFD_IDLE,
        POLLFDS_BASE,
@@ -164,9 +165,10 @@
 {
        struct client *client_loop;
        struct client *client_tmp;
-       long ux_sock = (long)arg;
+       long *ux_sock = (long *)arg;
 
-       close(ux_sock);
+       close(ux_sock[0]);
+       close(ux_sock[1]);
        close(notify_fd);
 
        list_for_each_entry_safe(client_loop, client_tmp, &clients, node) {
@@ -614,15 +616,24 @@
 /*
  * entry point
  */
-void *uxsock_listen(long ux_sock, void *trigger_data)
+void *uxsock_listen(int n_socks, long *ux_sock_in, void *trigger_data)
 {
        sigset_t mask;
        int max_pfds = MIN_POLLS + POLLFDS_BASE;
+       long ux_sock[2] = {-1, -1};
        /* conf->sequence_nr will be 1 when uxsock_listen is first called */
        unsigned int sequence_nr = 0;
        struct watch_descriptors wds = { .conf_wd = -1, .dir_wd = -1, .mp_wd = 
-1, };
        struct vectors *vecs = trigger_data;
 
+       if (n_socks < 1 || n_socks > 2) {
+               condlog(0, "uxsock: unsupported number of socket fds");
+               exit_daemon();
+               return NULL;
+       } else if (n_socks == 2)
+               ux_sock[1] = ux_sock_in[1];
+       ux_sock[0] = ux_sock_in[0];
+
        condlog(3, "uxsock: startup listener");
        polls = calloc(1, max_pfds * sizeof(*polls));
        if (!polls) {
@@ -673,8 +684,10 @@
                        }
                }
                if (num_clients < MAX_CLIENTS) {
-                       polls[POLLFD_UX].fd = ux_sock;
-                       polls[POLLFD_UX].events = POLLIN;
+                       polls[POLLFD_UX1].fd = ux_sock[0];
+                       polls[POLLFD_UX1].events = POLLIN;
+                       polls[POLLFD_UX2].fd = ux_sock[1];
+                       polls[POLLFD_UX2].events = POLLIN;
                } else {
                        /*
                         * New clients can't connect, num_clients won't grow
@@ -682,7 +695,7 @@
                         */
                        condlog(1, "%s: max client connections reached, pausing 
polling",
                                __func__);
-                       polls[POLLFD_UX].fd = -1;
+                       polls[POLLFD_UX1].fd = polls[POLLFD_UX2].fd = -1;
                }
 
                reset_watch(notify_fd, &wds, &sequence_nr);
@@ -766,8 +779,11 @@
                handle_signals(true);
 
                /* see if we got a new client */
-               if (polls[POLLFD_UX].revents & POLLIN) {
-                       new_client(ux_sock);
+               if (polls[POLLFD_UX1].revents & POLLIN) {
+                       new_client(ux_sock[0]);
+               }
+               if (polls[POLLFD_UX2].revents & POLLIN) {
+                       new_client(ux_sock[1]);
                }
 
                /* handle inotify events on config files */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/uxlsnr.h 
new/multipath-tools-0.11.0+183+suse.3973293/multipathd/uxlsnr.h
--- old/multipath-tools-0.11.0+164+suse.24eeee7/multipathd/uxlsnr.h     
2025-01-24 15:03:15.000000000 +0100
+++ new/multipath-tools-0.11.0+183+suse.3973293/multipathd/uxlsnr.h     
2025-03-04 23:53:22.000000000 +0100
@@ -5,7 +5,6 @@
 
 bool waiting_clients(void);
 void uxsock_cleanup(void *arg);
-void *uxsock_listen(long ux_sock,
-                   void * trigger_data);
+void *uxsock_listen(int n_socks, long *ux_sock, void *trigger_data);
 
 #endif

++++++ multipath-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.C8LMJk/_old  2025-03-06 14:48:19.152409217 +0100
+++ /var/tmp/diff_new_pack.C8LMJk/_new  2025-03-06 14:48:19.200411231 +0100
@@ -1,5 +1,5 @@
 name: multipath-tools
-version: 0.11.0+164+suse.24eeee7
-mtime: 1737727395
-commit: 24eeee77ef43bd4fee19f1eca07036874cda2859
+version: 0.11.0+183+suse.3973293
+mtime: 1741128802
+commit: 397329364d2e192b2538a9157cac3a77bd40fac0
 

Reply via email to