Skip to content

Releases: opensvc/multipath-tools

multipath-tools 0.14.0

20 Jan 14:28
7e5726b

Choose a tag to compare

multipath-tools 0.14.0, 2026/01

User-visible changes

Automatic removal of disconnected SCSI devices

This release adds support for automatically purging SCSI devices that become
disconnected at the storage target (e.g. because a LUN became unmapped by an
administrator). It's a long-standing problem that such path devices become
"stale" on the Linux side. When they are re-mapped on the storage side,
possibly with different parameters, the kernel may not correctly detect
the changes. By removing such stale devices, the kernel will be forced to
re-probe them, which fixes this problem.

The feature is controlled by a new configuration option purge_disconnected
that can be set in multipath.conf per multipath device, hardware entry, or
globally. The feature is switched off by default.

When purge_disconnected is enabled, SCSI devices for which the storage array
reports a "LUN NOT SUPPORTED" status are removed from the system, preventing
stale device entries from accumulating.

As this is a new feature, users are advised to test it in their environment
before enabling it in production.

Bug fixes

  • Make sure multipathd registers keys all paths of a multipath map after
    mpathpersist registered a key for a map. multipathd could fail to do so in
    some cases, e.g. if paths become unavailable or available while the
    registration was taking place. Fixes 0.13.0. Commits f7d6cd1, 4f3036b.
  • Fix mpathpersist --report-capabilities output. Fixes 0.5.0. Commit
    c8ed5e6.
  • Improve error handling when retrying REGISTER AND IGNORE persistent
    reservations commands. Fixes 0.13.0. Commit c971036.
  • Fix command descriptions in the multipathd man page. Fixes 0.9.2.
    Commit f3ba2e7.
  • Fix an undefined symbol error with the LLVM lld linker. Commit a298603.
    Fixes #132, 0.10.0.
  • Fix ISO C23 compatibility issue causing errors with new compilers.
    Commit 9f611e2.
  • Fix use-after-free error in free_pgvec(). Commit 7a07023.
    Fixes #128, 0.12.0.
  • Fix memory leak caused by not joining the "init unwinder" thread.
    Fixes 0.8.6. Commit 29f262b.
  • Fix memory leaks in kpartx. Commits 8c39e60, 02e0933. Fixes any version.
  • Fix a particular strict aliasing bug in the bitfield code.
    Fixes 0.8.9. Commit f1299f2. This fix isn't strictly necessary any
    more after adding -fno-strict-aliasing (see below), but it doesn't hurt to
    have it.
  • Print the warning "setting scsi timeouts is unsupported for protocol" only
    once per protocol. Commit 958c826. Fixes 0.9.0.
  • Make sure multipath-tools is compiled with the compiler flag
    -fno-strict-aliasing. This turns out to be necessary because our code
    uses techniques like container_of() which don't work well with
    strict aliasing rules. Commit 1ef540a.
    Fixes #130.

Other changes

  • Add wrapper code for libudev to avoid potential issues with calling libudev
    from a multi-threaded program. Commits 69f6590, 6cc012f.
  • Clean up the code for freeing struct path and struct multipath objects.
    Specifically, avoid freeing path objects from code that frees multipath
    maps, and vice versa. Treat path orphaning and freeing separately.
  • Hardware table: add Seagate Exos and Nytro series.
  • Avoid joining threads twice with liburcu 0.14.0 and newer.
  • CI updates (GitHub workflows).
  • Fix CI for cmocka 2.0. Commits 2c52668, f427f8f.
    Fixes #129
  • Remove the "hotplug" mode of kpartx, which has been obsolete since udev
    replaced legacy hotplug.
  • Add the ASAN=1 and OPT= make variables (see README.md).

multipath-tools 0.12.1

30 Oct 09:05
a1f7f3d

Choose a tag to compare

multipath-tools 0.12.1, 2025/10/30

  • Updates to the built-in hardware table:
    • add some NVMe storage array (VASTData, Infinidat, HITACHI VSP)
    • add QSAN
    • add EqualLogic PS

See NEWS.md for previous changes.

multipath-tools 0.11.3

30 Oct 09:03
7a84cc6

Choose a tag to compare

multipath-tools 0.11.3, 2025/10/30

  • Updates to the built-in hardware table:
    • add some NVMe storage array (VASTData, Infinidat, HITACHI VSP)
    • add QSAN
    • add EqualLogic PS

See NEWS.md for previous changes.

multipath-tools 0.10.5

30 Oct 09:01
001db12

Choose a tag to compare

multipath-tools 0.10.5, 2025/10/30

  • Updates to the built-in hardware table:
    • add some NVMe storage array (VASTData, Infinidat, HITACHI VSP)
    • add QSAN
    • add EqualLogic PS

See NEWS.md for previous changes.

multipath-tools 0.13.0

30 Oct 09:07
28c1134

Choose a tag to compare

multipath-tools 0.13.0, 2025/10

Major rework of the SCSI Persistent Reservation code

The mpathpersist code had many areas where it did a poor job of
mimicking the behavior of setting up persistent reservations on an
individual device, especially if some paths to the multipath device
were missing or unusable.

Issues improved in this release:

  • Persistent reservation operations in cases where the reservation
    is held held by an unavailable path. For example, when such a key
    is unregistered, libmpathpersist now preempts the old key
    after verifying that the multipath device is holding the reservation.
  • Releasing a reservation held by an unavailable path. This has always
    had code to handle it, but it relied on optional Persistent
    Reservation features. The new code preempts the key and then restores
    the removed registered keys while the device is suspended.
  • Handling removal of keys from paths that were down when the multipath
    device was unregistered.
  • Changing how conflicts on key registration are handled. Instead of
    the old rollback method (which was broken anyway),
    libmpathpersist now retries with REGISTER AND IGNORE as long as the
    REGISTER command completed successfully down some of the paths.
  • Changing when the reservation key is set to fix corner cases on
    failure and registration while paths are coming up.
  • Retrying to fix corner cases when a path is coming up while doing a
    reserve, preempt or clear.
  • Allowing registrations to succeed when there are retryable errors,
    if the paths are actually down.
  • Fixing the reservation key validation in some commands.
  • Handling a race condition that may occur while changing the reservation key
    of a multipath map.
  • Handling preemption of registrations of type "all registrants".

In the course of making these changes, a number of corner cases were fixed,
too. Please consult the commit messages for details.

Other changes

  • Updates to the built-in hardware table:
    • add some NVMe storage array (VASTData, Infinidat, HITACHI VSP)
    • add QSAN
    • add EqualLogic PS

See NEWS.md for previous changes.

0.11.0

23 Jan 11:03
de16cf8

Choose a tag to compare

Stable branches and new versioning scheme

Beginning with 0.11, the second digit in the multipath-tools version will be
used for upstream "major" releases. The 3rd and last digit will denote stable
releases in the future, containing only bug fixes on top of the last major
release. These bug fixes will be tracked in stable branches.

See README.md for additional information.

multipath-tools 0.11.0, 2025/01

User-visible changes

  • Modified the systemd unit multipathd.service such that multipathd will now
    restart after a failure or crash.
    Fixes #100.
  • Logging changes for verbosity level 3:
    • silenced logging of path status if the status is unchanged
    • silenced some unhelpful messages from scanning of existing maps
    • added a message when partition mappings are removed.

Other major changes

Rework of the path checking algorithm

This is a continuation of the checker-related work that went into 0.10.0. For
asynchronous checker algorithms (i.e. tur and directio), the start of the
check and the retrieval of the results are done at separate points in time,
which reduces the time for waiting for the checker results of individual paths
and thus strongly improves the performance of the checker algorithm, in
particular on systems with a large a amount of paths.

The algorithm has the following additional properties:

  1. multipath devices get synchronized with the kernel occasionally, even if
    they have not paths
  2. If multiple paths from a multipath device are checked in the same
    loop, the multipath device will only get synchronized with the kernel once.
  3. All the paths of a multipath device will converge to being checked at
    the same time (at least as much as their differing checker intervals will
    allow).
  4. The times for checking the paths of each multipath device will spread
    out as much as possible so multipathd doesn't do all of it's checking in
    a burst.
  5. path checking is done by multipath device (for initialized paths,
    the uninitialized paths are handled after all the adopted paths are
    handled).

Bug fixes

  • Fixed the problem that multipathd wouldn't start on systems with certain types
    of device mapper devices, in particular devices with multiple DM targets.
    The problem was introduced in 0.10.0.
    Fixes #102.
  • Fixed a corner case in the udev rules which could cause a device not to be
    activated during boot if a cold plug uevent is processed for a previously
    not configured multipath map while this map was suspended. This problem existed
    since 0.9.8.
  • Fixed the problem that devices with no_path_retry fail and no setting
    for dev_loss_tmo might get the dev_loss_tmo set to 0, causing the
    device to be deleted immediately in the event of a transport disruption.
    This bug was introduced in 0.9.6.
  • Fixed the problem that, if there were multiple maps with deferred failback
    (failback value > 0 in multipath.conf), some maps might fail back later
    than configured. The problem existed since 0.9.6.
  • Removed a warning message that multipathd would print if systemd's WATCHDOG_USEC environment variable had the value "0", which means that the watchdog is simply disabled. This (minor) problem existed since 0.4.9.
  • Fixed handling of empty maps, i.e. multipath maps that have a multipath UUID
    but don't contain a device-mapper table. Such maps can occur in very rare
    cases if some device-mapper operation has failed, or if a tool has been
    killed in the process of map creation. multipathd will now detect such
    cases, and either remove these maps or reload them as appropriate.
  • During map creation, fixed the case where a map with different name, but
    matching UUID and matching type was already present. multipathd
    previously failed to set up such maps. Now it will reload them with the
    correct content.
  • Fixed the logic for enabling the systemd watchdog (WatchdogSec= in the
    systemd unit file for multipathd).
  • Fixed a memory leak in the nvme foreign library. The bug existed since
    0.7.8.
  • Fixed a problem in the marginal path detection algorithm that could cause
    the io error check for a recently failed path to be delayed. This bug
    existed since 0.7.4.

Other

  • Default settings for hardware_handler have been removed from the
    internal hardware table. These settings have been obsoleted by the Linux
    kernel 4.3 and later, which automatically selects hardware handlers when
    SCSI devices are added. See the notes about SCSI_DH_MODULES_PRELOAD in
    README.md.
  • Added a hardware table entry for the SCSI Target Subsystem for Linux (SCST).
  • The text of the licenses has been updated to the latest versions from the
    Free Software Foundation.

Internal

  • libmp_mapinfo() now fills in the name, uuid, and dmi fields
    if requested by the caller, even if it encounters an error or an empty map.

Shortlog

@bmarzins (41):
libmultipath: store checker_check() result in checker struct
libmultipath: add missing checker function prototypes
libmultipath: split out the code to wait for pending checkers
libmultipath: remove pending wait code from libcheck_check calls
multipath-tools tests: fix up directio tests
libmultipath: split get_state into two functions
libmultipath: change path_offline to path_sysfs_state
multipathd: split check_path_state into two functions
multipathd: rename do_check_path to update_path_state
multipathd: split check_path into two functions
multipathd: split handle_uninitialized_path into two functions
multipathd: split check_paths into two functions
multipathd: fix "fail path" and "reinstate path" commands
multipathd: update priority once after updating all paths
multipathd: simplify checking for followover_should_failback
multipathd: only refresh prios on PATH_UP and PATH_GHOST
multipathd: remove pointless check
multipathd: fix deferred_failback_tick for reload removes
libmultipath: add libcheck_need_wait checker function
libmultipath: don't wait in libcheck_pending
multipathd: wait for checkers to complete
multipath-tools tests: fix up directio tests
multipathd: checker port_state before setting it.
multipathd: use timestamps to tell when the directio checker timed out
libmultipath: check DM UUID earlier in libmp_mapinfo__
libmultipath: use MAPINFO_CHECK_UUID in dm_get_multipath
multipathd: print an error when failing to connect to multipathd
multipathd.service: restart multipathd on failure
libmultipath: Fix MAPINFO_CHECK_UUID with partitions
libmultipath: signal device with no table in libmp_mapinfo
libmultipath: fix removing device after failed creation
libmultipath: set uuid, name, and dmi if a device is found
libmultipath: check table type in dm_find_map_by_wwid
libmultipath: handle a create corner case for empty devices
libmultipath: handle empty maps in dm_flush_map__
libmultipath: factor out code to check if a device is a partition
libmultipath: remove recursive calls in partmap_funcs
libmultipath: assume device is in use if dm_get_opencount fails
libmultipath: accept empty partitions as valid in do_foreach_partmaps
libmultipath: reduce log level for DMP_NOT_FOUND
libmultipath/foreign: fix memory leak in nvme foreign handler

@mwilck (34):
GitHub workflows: use {upload,download}-artifact@v4
GitHub workflows: update dawidd6/action-download-artifact
Github workflows: native.yml: use mosteo-actions/docker-run
GitHub workflows: native.yml: use extra job for clang
GitHub workflows: native.yaml: make test and archive separately
11-dm-mpath.rules.in: import DM_COLDPLUG_SUSPENDED only once
11-dm-mpath.rules.in: handle inactive suspended devices correctly
11-dm-mpath.rules.in: clarify DM_ACTIVATION logic
11-dm-mpath-rules.in: skip one .DM_NOSCAN check
11-dm-mpath.rules.in: set .DM_NOSCAN if MPATH_UNCHANGED is set
libmpathutil: avoid -Wcast-function-type-mismatch error with clang 19
multipath-tools tests: actually sleep in directio test
libmultipath: dm_get_maps(): don't bail out for single-map failures
libmultipath: libmp_mapinfo(): return DMP_NO_MATCH for multi-target maps
libmultipath: make MAPINFO_CHECK_UUID work with partitions
libmultipath: check map UUID in do_foreach_partmaps
libmultipath: increase log level for removing partitions
libmultipath: reduce log level of libmp_mapinfo() messages
libmultipath: don't log boring state messages at level 3
libmultipath: don't set dev_loss_tmo to 0 for NO_PATH_RETRY_FAIL
README.md: mention NEWS.md in Changelog section
NEWS.md: add section for 0.11.0
README.md: mention stable branches
NEWS.md: mention stable branches
libmultipath, libmpathpersist: bump ABI versions
multipathd: fix an unsigned int ovwerflow
GitHub workflows: enable unit tests for stable branches
GitHub Workflows: add abi check for stable branches
multipathd: move systemd watchdog handling into daemon
GitHub workflows: update checkout to @v4
multipath-tools tests: fix mapinfo tests
NEWS.md: describe latest changes
Update NEWS.md
libmultipath: bump version to 0.11.0

@xosevp (6):
multipath-tools: remove hwhandler from all hwtable configs
multipath-tools: hwtable housekeeping
multipath-tools: update comments in hwtable
multipath-tools: refresh fsf licences
multipath-tools: add SCST to hwtable
multipath-tools: add ...

Read more