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:
- multipath devices get synchronized with the kernel occasionally, even if
they have not paths - If multiple paths from a multipath device are checked in the same
loop, the multipath device will only get synchronized with the kernel once. - 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). - 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. - 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
fordev_loss_tmo
might get thedev_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 inmultipath.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 aboutSCSI_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 thename
,uuid
, anddmi
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 HPE MSA Gen7 (2070/2072) to hwtable
chenrenhui1@huawei.com (1):
libmultipath: add condition for enqueueing path to io error check