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 2026-01-29 17:44:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/multipath-tools (Old)
and /work/SRC/openSUSE:Factory/.multipath-tools.new.1995 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "multipath-tools"
Thu Jan 29 17:44:09 2026 rev:176 rq:1329631 version:0.14.1+208+suse.d08f5475
Changes:
--------
--- /work/SRC/openSUSE:Factory/multipath-tools/multipath-tools.changes
2026-01-26 10:45:26.351553257 +0100
+++
/work/SRC/openSUSE:Factory/.multipath-tools.new.1995/multipath-tools.changes
2026-01-29 17:44:48.044967415 +0100
@@ -1,0 +2,13 @@
+Mon Jan 26 17:02:24 UTC 2026 - Martin Wilck <[email protected]>
+
+- Update to version 0.14.1+208+suse.d08f5475:
+
+ * kpartx: fix segfault when operating on regular files
+ (bsc#1257244, bsc#1257153)
+ * multipathd: print path offline message even without a checker
+ (bsc#1254094)
+ * multipathd: make "multipathd show status" busy checker better
+ * multipathd: finish initalization of paths added while offline
+ * multipathd: don't add removed/partial paths to new maps
+
+-------------------------------------------------------------------
@@ -30 +43 @@
- `-fno-strict-aliasing`. (gh#opensvc/multipath-tools#130)
+ `-fno-strict-aliasing`. (gh#opensvc/multipath-tools#130, bsc#1255285)
Old:
----
multipath-tools-0.14.0+207+suse.18c17be5.tar.xz
New:
----
multipath-tools-0.14.1+208+suse.d08f5475.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ multipath-tools.spec ++++++
--- /var/tmp/diff_new_pack.lbqL0g/_old 2026-01-29 17:44:50.137055863 +0100
+++ /var/tmp/diff_new_pack.lbqL0g/_new 2026-01-29 17:44:50.141056031 +0100
@@ -35,7 +35,7 @@
%define libdmmp_version %(echo %{_libdmmp_version} | tr . _)
Name: multipath-tools
-Version: 0.14.0+207+suse.18c17be5
+Version: 0.14.1+208+suse.d08f5475
Release: 0
Summary: Tools to Manage Multipathed Devices with the device-mapper
License: GPL-2.0-only AND GPL-3.0-or-later
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.lbqL0g/_old 2026-01-29 17:44:50.185057892 +0100
+++ /var/tmp/diff_new_pack.lbqL0g/_new 2026-01-29 17:44:50.189058060 +0100
@@ -1,5 +1,5 @@
-mtime: 1769188185
-commit: 5335c2c38eaa0633a59b490bf98e6c9d92b33d92c3a2967e860f758bf7426bc8
+mtime: 1769593022
+commit: 8c0bf9ab1aab96c93e7fa4f56bff03b090c29a3e4792f66724ad012b7bdeb2f0
url: https://src.opensuse.org/mwilck/multipath-tools
revision: factory
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.lbqL0g/_old 2026-01-29 17:44:50.237060090 +0100
+++ /var/tmp/diff_new_pack.lbqL0g/_new 2026-01-29 17:44:50.241060259 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param
name="url">https://github.com/openSUSE/multipath-tools.git</param>
- <param
name="changesrevision">18c17be57caf9aefe501782c8c582cd0f8791bbc</param></service></servicedata>
+ <param
name="changesrevision">d08f5475301e6fff055457fa1401c8c0d94ef65e</param></service></servicedata>
(No newline at EOF)
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-01-28 10:37:33.000000000 +0100
@@ -0,0 +1,5 @@
+.osc
+\#*
+*~
+*.obscpio
+/multipath-tools/
++++++ multipath-tools-0.14.0+207+suse.18c17be5.tar.xz ->
multipath-tools-0.14.1+208+suse.d08f5475.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/.github/actions/spelling/patterns.txt
new/multipath-tools-0.14.1+208+suse.d08f5475/.github/actions/spelling/patterns.txt
---
old/multipath-tools-0.14.0+207+suse.18c17be5/.github/actions/spelling/patterns.txt
2026-01-20 18:27:55.000000000 +0100
+++
new/multipath-tools-0.14.1+208+suse.d08f5475/.github/actions/spelling/patterns.txt
2026-01-26 17:57:00.000000000 +0100
@@ -15,6 +15,9 @@
\b0x[0-9a-f]{8}\b
\b0x[0-9a-f]{16}\b
+# Commit SHAs
+\b[0-9a-f]{7}\b
+
# WWNN/WWPN (NAA identifiers)
\b(?:0x)?10[0-9a-f]{14}\b
\b(?:0x|3)?[25][0-9a-f]{15}\b
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/.github/workflows/spelling.yml
new/multipath-tools-0.14.1+208+suse.d08f5475/.github/workflows/spelling.yml
--- old/multipath-tools-0.14.0+207+suse.18c17be5/.github/workflows/spelling.yml
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/.github/workflows/spelling.yml
2026-01-26 17:57:00.000000000 +0100
@@ -86,6 +86,23 @@
- 'opened'
- 'reopened'
- 'synchronize'
+ paths:
+ - '.github/workflows/spelling.yml'
+ - 'README*'
+ - 'NEWS.md'
+ - '**.3'
+ - '**.5'
+ - '**.8'
+ - '**.8'
+ - '**.in'
+ - '**.service'
+ - '**.socket'
+ - '**.rules'
+ - '**/libdmmp.h'
+ - '**/mpath_valid.h'
+ - '**/mpath_cmd.h'
+ - '**/mpath_persist.h'
+ - '.github/actions/spelling/*'
jobs:
spelling:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/multipath-tools-0.14.0+207+suse.18c17be5/NEWS.md
new/multipath-tools-0.14.1+208+suse.d08f5475/NEWS.md
--- old/multipath-tools-0.14.0+207+suse.18c17be5/NEWS.md 2026-01-20
18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/NEWS.md 2026-01-26
17:57:00.000000000 +0100
@@ -9,6 +9,28 @@
See [README.md](README.md) for additional information.
+## multipath-tools 0.14.1, 2026/01
+
+### Bug fixes
+
+* kpartx: Fix freeing static buffer when operating on regular files.
+ Fixes 0.14.0. Commit fab5d44.
+ Fixes [#139](https://github.com/opensvc/multipath-tools/issues/139).
+* Fix initialization of paths that were offline during path detection.
+ Commit 1942fb1.
+* Fix printing the "path offline" log message for offline paths that don't
+ have a path checker configured. Commit 1a364a1.
+
+### Other changes
+
+* If path devices that are members of multipath maps aren't detected during
+ multipathd startup or `reconfigure`, don't add them to newly created maps
+ in the first place. In previous versions, such paths would be added to the
+ maps, only to be removed later. Commit a04be55.
+* Improve the detection of "busy" state in the `show status` command, such
+ that reading udev events from udevd is also counted as busy.
+ Commit 7fdd93b.
+
## multipath-tools 0.14.0, 2026/01
### User-visible changes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/kpartx/devmapper.c
new/multipath-tools-0.14.1+208+suse.d08f5475/kpartx/devmapper.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/kpartx/devmapper.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/kpartx/devmapper.c
2026-01-26 17:57:00.000000000 +0100
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2004, 2005 Christophe Varoqui
*/
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -699,14 +700,13 @@
char *nondm_create_uuid(dev_t devt)
{
-#define NONDM_UUID_BUFLEN (34 + sizeof(NONDM_UUID_PREFIX) + \
- sizeof(NONDM_UUID_SUFFIX))
- static char uuid_buf[NONDM_UUID_BUFLEN];
- snprintf(uuid_buf, sizeof(uuid_buf), "%s_%u:%u_%s",
- NONDM_UUID_PREFIX, major(devt), minor(devt),
- NONDM_UUID_SUFFIX);
- uuid_buf[NONDM_UUID_BUFLEN-1] = '\0';
- return uuid_buf;
+ char *uuid;
+
+ if (asprintf(&uuid, "%s_%u:%u_%s", NONDM_UUID_PREFIX, major(devt),
+ minor(devt), NONDM_UUID_SUFFIX) >= 0)
+ return uuid;
+ else
+ return NULL;
}
int nondm_parse_uuid(const char *uuid, unsigned int *major, unsigned int
*minor)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/kpartx/kpartx.c
new/multipath-tools-0.14.1+208+suse.d08f5475/kpartx/kpartx.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/kpartx/kpartx.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/kpartx/kpartx.c
2026-01-26 17:57:00.000000000 +0100
@@ -334,8 +334,11 @@
* This allows deletion of partitions created with older kpartx
* versions which didn't use the fake UUID during creation.
*/
- if (!uuid && !(what == DELETE && force_devmap))
+ if (!uuid && !(what == DELETE && force_devmap)) {
uuid = nondm_create_uuid(buf.st_rdev);
+ if (!uuid)
+ exit(1);
+ }
if (delim == NULL) {
delim = xmalloc(DELIM_SIZE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/configure.c
new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/configure.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/configure.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/configure.c
2026-01-26 17:57:00.000000000 +0100
@@ -1114,7 +1114,17 @@
continue;
}
- /* 4. path is out of scope */
+ /*
+ * 4. The path wasn't found in path_discovery. It only exists
+ * in an old map.
+ */
+ if (pp1->initialized == INIT_PARTIAL ||
+ pp1->initialized == INIT_REMOVED) {
+ orphan_path(pp1, "path not found");
+ continue;
+ }
+
+ /* 5. path is out of scope */
if (refwwid && strncmp(pp1->wwid, refwwid, WWID_SIZE - 1))
continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/discovery.c
new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/discovery.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/discovery.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/discovery.c
2026-01-26 17:57:00.000000000 +0100
@@ -2585,6 +2585,8 @@
* Recoverable error, for example faulty or offline path
*/
pp->chkrstate = pp->state = PATH_DOWN;
+ if (mask & DI_IOCTL && pp->ioctl_info == IOCTL_INFO_NOT_REQUESTED)
+ pp->ioctl_info = IOCTL_INFO_SKIPPED;
if (pp->initialized == INIT_NEW || pp->initialized == INIT_FAILED)
memset(pp->wwid, 0, WWID_SIZE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/structs_vec.c
new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/structs_vec.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/structs_vec.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/structs_vec.c
2026-01-26 17:57:00.000000000 +0100
@@ -315,7 +315,8 @@
pp->dev, mpp->alias);
continue;
}
- if (pp->initialized == INIT_REMOVED)
+ if (pp->initialized == INIT_REMOVED ||
+ pp->initialized == INIT_PARTIAL)
continue;
if (mpp->queue_mode == QUEUE_MODE_RQ &&
pp->bus == SYSFS_BUS_NVME &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/uevent.c
new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/uevent.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/uevent.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/uevent.c
2026-01-26 17:57:00.000000000 +0100
@@ -52,6 +52,7 @@
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;
@@ -70,13 +71,14 @@
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)
@@ -730,6 +732,7 @@
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)
@@ -739,6 +742,8 @@
err = -errno;
break;
}
+ uatomic_set(&adding_uev, 1);
+
events = uevent_receive_events(fd, &uevlisten_tmp, monitor);
if (events <= 0)
continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/version.h
new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/version.h
--- old/multipath-tools-0.14.0+207+suse.18c17be5/libmultipath/version.h
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/libmultipath/version.h
2026-01-26 17:57:00.000000000 +0100
@@ -11,9 +11,9 @@
#ifndef VERSION_H_INCLUDED
#define VERSION_H_INCLUDED
-#define VERSION_CODE 0x000E00
+#define VERSION_CODE 0x000E01
/* MMDDYY, in hex */
-#define DATE_CODE 0x01101A
+#define DATE_CODE 0x01171A
#define PROG "multipath-tools"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/multipath-tools-0.14.0+207+suse.18c17be5/multipathd/main.c
new/multipath-tools-0.14.1+208+suse.d08f5475/multipathd/main.c
--- old/multipath-tools-0.14.0+207+suse.18c17be5/multipathd/main.c
2026-01-20 18:27:55.000000000 +0100
+++ new/multipath-tools-0.14.1+208+suse.d08f5475/multipathd/main.c
2026-01-26 17:57:00.000000000 +0100
@@ -96,12 +96,11 @@
#define LOG_MSG(lvl, pp) \
do { \
- if (pp->mpp && checker_selected(&pp->checker) && \
- lvl <= libmp_verbosity) { \
- if (pp->sysfs_state == PATH_DOWN) \
+ if (pp->mpp && lvl <= libmp_verbosity) { \
+ if (pp->sysfs_state != PATH_UP) \
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); \
\
@@ -2572,6 +2571,26 @@
return do_sync_mpp(vecs, mpp);
}
+/*
+ * pp->wwid should never be empty when this function is called, but if it
+ * is, this function can set it.
+ */
+static bool new_path_wwid_changed(struct path *pp, int state)
+{
+ char wwid[WWID_SIZE];
+
+ strlcpy(wwid, pp->wwid, WWID_SIZE);
+ if (get_uid(pp, state, pp->udev, 1) != 0) {
+ strlcpy(pp->wwid, wwid, WWID_SIZE);
+ return false;
+ }
+ if (strlen(wwid) && strncmp(wwid, pp->wwid, WWID_SIZE) != 0) {
+ strlcpy(pp->wwid, wwid, WWID_SIZE);
+ return true;
+ }
+ return false;
+}
+
static int
update_path_state (struct vectors * vecs, struct path * pp)
{
@@ -2601,14 +2620,33 @@
return CHECK_PATH_SKIPPED;
}
- if (pp->recheck_wwid == RECHECK_WWID_ON &&
- (newstate == PATH_UP || newstate == PATH_GHOST) &&
+ if ((newstate == PATH_UP || newstate == PATH_GHOST) &&
((pp->state != PATH_UP && pp->state != PATH_GHOST) ||
- pp->dmstate == PSTATE_FAILED) &&
- check_path_wwid_change(pp)) {
- condlog(0, "%s: path wwid change detected. Removing", pp->dev);
- return handle_path_wwid_change(pp, vecs)? CHECK_PATH_REMOVED :
- CHECK_PATH_SKIPPED;
+ pp->dmstate == PSTATE_FAILED)) {
+ bool wwid_changed = false;
+
+ if (pp->initialized == INIT_NEW) {
+ /*
+ * Path was added to map while offline, mark it as
+ * initialized.
+ * DI_SYSFS was checked when the path was added
+ * DI_IOCTL was checked when the checker was selected
+ * DI_CHECKER just got checked
+ * DI_WWID is about to be checked
+ * DI_PRIO will get checked at the end of this checker
+ * loop
+ */
+ pp->initialized = INIT_OK;
+ wwid_changed = new_path_wwid_changed(pp, newstate);
+ } else if (pp->recheck_wwid == RECHECK_WWID_ON)
+ wwid_changed = check_path_wwid_change(pp);
+ if (wwid_changed) {
+ condlog(0, "%s: path wwid change detected. Removing",
+ pp->dev);
+ return handle_path_wwid_change(pp, vecs)
+ ? CHECK_PATH_REMOVED
+ : CHECK_PATH_SKIPPED;
+ }
}
if ((newstate != PATH_UP && newstate != PATH_GHOST &&
newstate != PATH_PENDING) && (pp->state == PATH_DELAYED)) {