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)) {

Reply via email to