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