Skip to content

multipath-tools 0.12.0#119

Merged
mwilck merged 111 commits into
opensvc:masterfrom
openSUSE:queue
Sep 9, 2025
Merged

multipath-tools 0.12.0#119
mwilck merged 111 commits into
opensvc:masterfrom
openSUSE:queue

Conversation

@mwilck

@mwilck mwilck commented Aug 26, 2025

Copy link
Copy Markdown
Collaborator

multipath-tools 0.12.0, 2025/08

User-visible changes

  • Besides the abstract unix socket (default:
    @/org/kernel/linux/storage/multipathd), multipathd now also listens
    on a unix pathname socket (default: /run/multipathd.socket). This makes it
    possible to communicate with multipathd from a container in which the
    named socket is bind-mounted. See multipathd.8 for details.
    Fixes #111.
    Commits f421a43 ff.
  • multipathd now sets the port_state of Fibre Channel remote ports to
    "marginal" for NVMe devices, too. Note that unlike SCSI, this will not
    directly affect the kernel NVMe driver's behavior. Marginal state will
    affect path grouping on multipathd's part, though.
    This change is only effective if dm-multipath is used for NVMe devices
    (i.e. the kernel parameter nvme_core.multipath=N is in use).
    Commit 30fc3e9.
  • Improved the communication with udev and systemd by triggering
    uevents when path devices are added to or removed from multipath maps,
    or when multipathd reconfigure is executed after changing blacklist
    directives in multipath.conf. Both sockets can also be received from
    systemd if socket activation is used (not recommended for multipathd).
    Fixes #103. Commits 98b3a7b, ad3ea47, d9c6133, 272808c f.
  • Maps that were added outside of multipathd (e.g. using the multipath
    command) and that couldn't be reloaded by multipathd used to be ignored
    by multipathd. multipathd will now monitor them. If some paths were
    offline while the map was created, multipathd will now add them to the
    map when they go online again. Commit 9038d25 ff.
  • multipathd retries persistent reservation commands that have failed on one
    path on another one. Commit d1106c8.

Other major changes

  • Continued cleanup of the path checker loop. The various cases in which
    maps need to be reloaded are now handled more cleanly in the new
    function checker_finished(). Map deletions don't happen any more
    inside the checker loop, simplifying the code flow. checker_finished()
    now also takes care of all actions that multipath was doing in scheduled
    intervals ("ticks"). Commit 0ff1191 ff.

Bug fixes

  • Fix multipathd crash because of invalid path group index value, for example
    if an invalid path device was removed from a map.
    Fixes #105.
    This issue existed since 0.4.5. Commit cd912cf.
  • Make sure maps are reloaded in the path checker loop after detecting an
    inconsistent or wrong kernel state (e.g. missing or falsely mapped path
    device). Wrongly mapped paths will be unmapped and released to the system.
    Fixes another issue reported in
    #105.
    Commit 340e74d.
  • Fix the problem that, if a path device is added while offline, path grouping
    may be wrong if path_grouping_policy is set to group_by_serial or
    group_by_tpg, even if the path comes online later.
    Fixes #108.
    This problem has existed since 0.4.5. Commits c20fb70, 70c1724.
  • Fix compilation issue with musl libc on ppc64le and s390x. Fixes Failing to build on ppc64le and s390x arches on musl libc #112.
    Commit 439044b
  • Fix the problem that group_by_tpg might be disabled if one or more
    paths were offline during initial configuration.
    This problem exists since 0.9.6. Commit b47a577.
  • Fix the problem that if a map was scheduled to be reloaded already,
    max_sectors_kb might not be set on a path device that
    was being added to a multipath map. This problem was introduced in 0.9.9.
    Commit f5c0c4b.
  • Fix possible misdetection of changed pathgroups in a map.
    This (minor) problem was introduced in 0.5.0. Commit d4b35f6.
  • Avoid a possible system hang during shutdown with queueing multipath maps,
    which was introduced in 0.8.8. Commit ee062a0.
  • Failed paths should be checked every polling_interval. In certain cases,
    this wouldn't happen, because the check interval wasn't reset by multipathd.
    Commit 21c21bf.
  • It could happen that multipathd would accidentally release a SCSI persistent
    reservation held by another node. Fix it. Commit 8d5f4a5.
  • After manually failing some paths and then reinstating them, sometimes
    the reinstated paths were immediately failed again by multipathd.
    Commit f1c5200.
  • Fix crash in foreign (nvme native multipath) code, present since 0.8.8.
    Commit 9b1d721.
  • Fix file descriptor leak in kpartx. This problem existed since 0.4.5.
    Commit 1757dbb.
  • Fix memory leak in error code path in libmpathpersist which existed
    since 0.4.9. Commit b7fd205.
  • Fix possible out-of-bounds memory access in vector code that existed
    since 0.4.9. Commit 2480d57.
  • Fix a possible NULL dereference in the iet prioritizer, existing since
    0.4.9. Commit 01996d5.
  • Fix misspelled gcc option "-std". Commit f9fb65f.
  • Fix error code path for "multipathd show devices".
    Problem existed since 0.8.5. Commits 4f0f43f, 5c59d5d.
  • Fix an error check in the nvme foreign library, problem introduced in 0.7.8.
    Commit 66408f1.

Other changes

  • Cleanup and improvement of the path discovery code that uses ioctls to
    detect device properties. Commits 6b91bfb ff.
  • Fix CI with cmocka 1.1.8 and newer. Fixes multipath-tools test: add missing include for stdint.h #117. Commit 6686b8f.
  • Updates to the built-in hardware table:
    • Add Quantum devices
    • Enable ALUA for AStor/NeoSapphire
    • Update NFINIDAT/InfiniBox config
    • Fix product blacklist of S/390 devices
    • Add Seagate Lyve
    • Add HITACHI VSP One SDS Block
  • Man page updates.
  • Updates to GitHub workflows.
  • Replace FSF licenses with SPDX-License-Identifier.

Shortlog

@bmarzins (35):
libmultipath: export udev pthread cleanup functions
multipathd: set rport port_state to marginal for NVMe devices
libmultipath: Don't skip set_path_max_sectors_kb()
multipathd: reload maps in checkerloop() if necessary.
multipathd: Don't call select_action in reload_map
multipathd: use symbolic values for wait_for_udev
multipathd: don't reload the map when waiting for udev
libmultipath: don't set need_reload in adopt_paths
libmultipath: remove need_reload check from select_action
libmultipath: drop return value from update_pathvec_from_dm
libmultipath: Dont scan pointless sysfs parents
libmultipath: move sysfs checks out of scsi_ioctl_pathinfo
libmultipath: rename DI_SERIAL to DI_IOCTL
libmultipath: retry DI_IOCTL functions if they were skipped
libmultipath: set need_reload when pp->serial gets set
libmultipath: set need_reload when the tpg_id gets set
libmultipath: stop static analyzer complaint in init_foreign
libmultipath: be lenient in allowing the alua-based pgpolicies
multipath-tools: fix compilation with latest userspace-rcu code
libmultipath: include urcu.h before urcu/atomic.h
libmultipath: remove buggy reinstate_paths function
multipathd: add multipathd-queueing.service to gitignore
multipath: clean up find_multipaths documentation
multipathd: Add multipathd man page section about sockets
multipathd: monitor new multipath dev even if we can't update it
libmultipath: add helper function check_path_wwid_change
multipathd: re-add paths skipped because they were offline
multipathd: don't update paths in INIT_MISSING_UDEV
libmultipath: handle blacklisted paths on map_discovery
multipathd: disable queueing on invalid multipath devices
multipathd: always reset checker interval for failed paths
libmpathpersist: retry commands on other paths in mpath_prout_common
libmpathpersist: check released key against the reservation key
libmultipath: fix crash in print_foreign_topology
libmultipath: fix error return in snprint_devices()

@DimStar77 (1):
tests: fix tests when built against cmocka 1.1.8 or newer

Kéléfa Sané (1):
libdmmp/Makefile: Fix KBUILD_BUILD_TIMESTAMP usage

@mwilck (57):
libmultipath: fix handling of pp->pgindex
libmpathutil: change STATIC_BITFIELD to BITFIELD
libmpathutil: add cleanup_bitfield()
libmultipath: move pathcmp() to configure.c
libmultipath: re-implement pgcmp without the pathgroup id
libmultipath: trigger uevents upon map creation in domap()
multipathd: trigger uevents upon map removal in coalesce_maps()
multipathd: improve a log message in coalesce_maps()
multipathd: don't reload map in update_mpp_prio()
multipathd: remove dm_get_info() call from refresh_multipath()
multipathd: sync maps at end of checkerloop
multipathd: emit a warning if a map remains inconsistent after reload
multipathd: move yielding for waiters to start of checkerloop
multipathd: add checker_finished()
multipathd: move "tick" calls into checker_finished()
multipathd: don't call reload_and_sync_map() from deferred_failback_tick()
multipathd: move retry_count_tick() into existing mpvec loop
multipathd: don't call update_map() from missing_uev_wait_tick()
multipathd: don't call udpate_map() from ghost_delay_tick()
multipathd: only call reload_and_sync_map() when ghost delay expires
multipathd: remove non-existent maps in checkerloop
multipathd: remove mpvec_garbage_collector()
multipathd: enable pathgroups in checker_finished()
libmultipath: bump ABI version to 29.0.0
multipath-tools: update NEWS.md
multipathd: trigger uevents for blacklisted paths in reconfigure
multipath-tools: move DEFAULT_SOCKET definition into Makefile.inc
multipath-tools: add helper mpath_fill_sockaddr__()
libmpathutil: add support for Unix pathname sockets
libmpathutil: move systemd_listen_fds() support into multipathd
multipathd: make uxsock_listen() take a pointer to fd
multipathd: allow receiving two socket fds from systemd
multipathd: listen on pathname and abstract socket by default
libmpathcmd: try both abstract and pathname sockets
libmpathcmd: honor MULTIPATH_SOCKET_NAME environment variable
multipathd: honor MULTIPATH_SOCKET_NAME environment variable
multipathd: fix hang during shutdown with queuing maps
GitHub workflows: use docker/setup-qemu-action@v2 instead of dbhi/qus
GitHub workflows: use docker/setup-qemu-action@v2 in foreign.yaml
libdmmp: update time stamp of man pages
GitHub workflows: retire Ubuntu 20.04
kpartx_id: fix shellcheck reported errors
kpartx: fix file descriptor leak
libmpathpersist: fix memory leak in mpath_prout_rel()
libmpathutil: vector_del_slot: modify v->allocated if realloc fails
libmultipath: fix undefined behavior in 31-bit shift
libmultipath: prioritizers/iet: fix possible NULL dereference
libmpathutil: remove vector_repack()
libmpathutil: remove VECTOR_DEFAULT_SIZE macro
multipathd: cli_reinstate(): avoid reinstated paths being failed again
Update NEWS.md
GitHub workflows: Add commit SHA pattern to spelling action
GitHub workflows: enable Debian trixie and Fedora 42
libmultipath: bump version to 0.12.0
libmultipath: fix missing return value check in snprint_devices()
libmultipath/foreign/nvme: fix return value check in get_ctrl_blkdev()
Update NEWS.md with info about latest fixes

@xosevp (17):
multipath-tools: delete unreachable maintainers
multipath-tools: identify more arrays under IBM/2145 ID
multipath-tools: add Quantum devices to hwtable
multipath-tools: replace dead url
multipath-tools: hwtable: remove .pgfailback from QUANTUM/F1
multipath-tools: hwtable: change AStor/NeoSapphire to work also with ALUA
multipath-tools: update Path Selector descriptions on the man page
multipath-tools: remove extra hyphen from GCC std option
multipath-tools: replace FSF licences boilerplate with a SPDX-License-Identifier
multipath-tools: fix default blacklist of s390 devices
multipath-tools: fix licence identifier
multipath-tools: add a comment about DASD arrays vendors
multipath-tools: standardize NVME vendor_id in hwtable
multipath-tools: fix hwtable comments
multipath-tools: add HITACHI VSP One SDS Block to hwtable
multipath-tools: add Seagate Lyve to hwtable
multipath-tools: update NFINIDAT/InfiniBox config in hwtable

bmarzins and others added 30 commits January 23, 2025 23:06
A future patch will make use of cleanup_udev_enumerate_ptr() and
cleanup_udev_device_ptr().

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Muneendra Kumar <muneendra.kumar@broadcom.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
When a scsi path device is set to marginal, it updates the rport state.
Do this for NVMe devices as well. Unlike with scsi devices, setting the
rport state to marginal will not directly change the nvme driver
behavior. However it will allow users to see the rports associated with
their Marginal paths.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Acked-by: Muneendra Kumar <muneendra.kumar@broadcom.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
pp->pgindex is set in disassemble_map() when a map is parsed.
There are various possiblities for this index to become invalid.
pp->pgindex is only used in enable_group() and followover_should_fallback(),
and both callers take no action if it is 0, which is the right
thing to do if we don't know the path's pathgroup.

Make sure pp->pgindex is reset to 0 in various places:
- when it's orphaned,
- before (re)grouping paths,
- when we detect a bad mpp assignment in update_pathvec_from_dm().
- when a pathgroup is deleted in update_pathvec_from_dm(). In this
  case, pgindex needs to be invalidated for all paths in all pathgroups
  after the one that was deleted.

The hunk in group_paths is mostly redundant with the hunk in free_pgvec(), but
because we're looping over pg->paths in the former and over pg->pgp in
the latter, I think it's better too play safe.

Fixes: 99db1bd ("[multipathd] re-enable disabled PG when at least one path is up")
Fixes: opensvc#105
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
A non-dynamically allocated bitfield doesn't have to have static
scope, it can also be a local variable on the stack. Change the macro such
that it can also be used for the latter case.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
... as it has only one caller, and make it static. No functional changes.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
pgp->id is not only calculated with a weak XOR hash, it can also
get wrong if any path regrouping occurs. As it's not a big gain
performance-wise, just drop pgp->id and compare path groups
directly.

The previous algorithm didn't detect the case case where cpgp
contained a path that was not contained in pgp. Fix this, too,
by comparing the number of paths in the path groups and making
sure that each pg of mpp is matched by exactly one pg of cmpp.

Fixes: 90773ba ("libmultipath: resolve hash collisions in pgcmp()")
Suggested-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
If map creation succeeds, previously not multipathed devices are
now multipathed. udev may not have noticed this yet, thus trigger
path uevents to make it aware of the situation. Likewise, if
creating a map fails, the paths in question were likely considered
multipath members by udev, too. They will now be marked as failed,
so trigger an event in this situation as well.

Fixes: opensvc#103
Suggested-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
... if a map has been flushed. In this case, we know that the
the paths haven't been multipathed by coalesce_paths() because of the current
configuration (failure to create the map can't be the reason if the map
exists in coalesce_maps()). Make sure udev sees the paths which have
been released from the map as non-multipath.

Note that this is the only case where maps are flushed where it is correct
to trigger paths uevents. In other cases, e.g. after a "remove map" CLI
command, the configuration is unchanged and if we triggered an uevent,
the map would be re-created by multipathd when the uevent arrived.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
If a multipath device already has need_reload set when a path is
adopted, it won't call set_path_max_sectors_kb() because of
short-circuit evaluation. This isn't what's intended.

Fixes: e5e20c7 ("libmultipath: set max_sectors_kb in adopt_paths()")
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
update_pathvec_from_dm() may set mpp->need_reload if it finds
inconsistent settings. In this case, the map should be reloaded, but so
far we don't do this reliably. Add a call to reload_and_sync_map()
when updating the maps at the end of a loop in checkerloop().

Suggested-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
reload_map() was calling select_action() with force_reload set. Since
mpp will always be a member of vecs->mpvec when reload_map() is called,
when cmpp and cmpp_by_name are looked up in select_action(), they will
just point to mpp. This means that none of the early checks related to
cmpp in select_action() will do anything, and the action will always
end up being ACT_RELOAD. So we can just set ACT_RELOAD in reload_map()
and skip the work.

Additionally, calling select_action() with force_reload set will set
force_udev_reload. This isn't necessary for any of the reload_map()
callers, and will just cause udev to do extra work. I did set
force_udev_reload in cli_reload(), so that it works like calling
"multipath -r", which does force udev to rescan the device.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Rather, return a bool indicating whether checkerloop() should call
reload_and_sync_map().

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
If the map is inaccessible, update_multipath_strings() will fail.
There is no need for the extra call to dm_get_info().

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Rather than calling sync_mpp early in the checkerloop and tracking
map synchronization with synced_count, call sync_mpp() in the CHECKER_FINISHED
state, if either at least one path of the map has been checked in the current
iteration, or the sync tick has expired. This avoids potentially deleting
paths from the pathvec through the do_sync_mpp() -> update_multipath_strings()
-> sync_paths -> check_removed_paths() call chain while we're iterating over
the pathvec. Also, the time gap between obtaining path states and syncing
the state with the kernel is smaller this way.

Suggested-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
After reading the kernel device-mapper table, update_pathvec_from_dm()
sets the mpp->need_reload flag if an inconsistent state was found (often a
path with wrong WWID). We expect reload_and_sync_map() to fix this situation.
If this is not the case (need_reload still set after map reloading), it's
most probably a bug.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
This simplifies the lock-taking logic and prepares the following
patch.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Move the code that handles the checker_state == CHECKER_FINISHED state
into a separate function for better readability. Subsequent patches will
add code to this function.

Replace the "&& reload_and_sync_map()" conditional by a subordinate if
statement, as this expresses the logic of the code better.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
The various "tick" functions will only be called after CHECKER_FINISHED
is reached. So we might as well move them into the respective code block
into checker_finished(). This way don't have to drop and re-take he lock
when all paths have been checked.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
…ick()

Instead, move the call inside the existing loop over vecs->mpvec and call
reload_and_sync_map() from checker_finished(). Note that we can't simply
put the call deferred_failback_tick() in the "if" condition, because we
need to adjust the ticks even if update_mpp_prio() returns true. For
consistency, use separate bool variables for each condition that would
necessitate a reload.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Instead, check for missing uevents in the existing mpvec loop.
Note that if the uevent tick expires, we need to call update_map() rather than
reload_and_sync_map(), because the paths have not been added to the multipath
(see wait_for_udev handling ev_add_path()).

The set of actions taken by update_map() is a superset of those in
reload_and_sync_map(), thus we don't need to call the latter if we've already
called the former.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Instead, move the call into the existing mpvec loop and call update_map()
from checker_finished().

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
While we're waiting for active paths to appear when ghost delay is
enabled, we do add new paths to multipathd's internal mpp data structure
as they are discovered (unlike missing uevent case, where we orphan
the paths instead). When the ghost_delay timer expires, it should be
sufficient to call the more light-weight reload_and_sync_map() instead
of update_map().

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
If update_multipath_strings() returns DMP_NOT_FOUND for a map that
we are tracking in the checker, the map must have been removed by
an external entity. Remove it.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
This function duplicates functionality that we now have in the
checker_finished() code path. Remove it.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
multipathd calls enable_group() from update_path_state() if a path in a
previously disabled pathgroup is reinstated. This call may be mistakenly
skipped if the path group status wasn't up-to-date while update_path_state()
was executed. This can happen after applying the previous patch "multipathd:
sync maps at end of checkerloop", if the kernel has disabled the group during
the last checker interval.

Therefore add another check in checker_finished() after calling sync_mpp(),
and enable groups if necessary. This step can be skipped if the map was
reloaded, because after a reload, all pathgroups are enabled by default.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
In checker_finished(), if we are still waiting for the initial uevent,
we should instead set wait_for_udev to UDEV_WAIT_RELOAD, so that we
trigger a reload when we get the uevent.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
xosevp added 5 commits August 26, 2025 00:01
There is no vendor_id/product_id for NVMe devices.
Just "model". and typically it's a combination of both.

"NVME" is a static tag, added in:
https://github.com/opensvc/multipath-tools/blob/de16cf82c5263fc148118be56ebf44c8f0ee60b8/libmultipath/discovery.c#L1635

Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM_DEVEL-ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
- use "VSP" for the whole family, too many variants
- identify Quantum models

Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM-DEVEL-ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Info from #11-12 pages:
https://docs.hitachivantara.com/api/khub/documents/E1h3w1EJLDYuE5Yde3tQfw/content?Ft-Calling-App=ft%2Fturnkey-portal&Ft-Calling-App-Version=5.1.38#

Cc: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com>
Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM-DEVEL-ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Config on page opensvc#30:
https://www.seagate.com/content/dam/seagate/pdfs/content/seagate/us/en/manuals/software/lyve-mobile-array-cli/lyve-mobile-array-cli-en_US.pdf

Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM_DEVEL-ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
New recommended values for SLES-15, RHEL-8, and Ubuntu-22, or above:
https://lh3.googleusercontent.com/pw/AP1GczMchJ6bcMIohp_g3Ik5DS6BZv_IW0iwaEXf968sJsR8fr_p3mR4ThRpmHpZE_VMnlcV8j0uuuI2kz-eoqekRCUBxyTBKS7n-4WFMsUiecq8i7nIjEuhfZFrV54DBQLDzGt6ofakAAF1L-ZcAuCWW18=w0-h0

device {
   vendor "NFINIDAT"
   product "InfiniBox"
   path_grouping_policy "group_by_prio"
   path_checker "tur"
   features 0
   hardware_handler "1 alua"
   prio "alua"
   rr_weight "priorities"
   no_path_retry "queue"
   rr_min_io 1
   rr_min_io_rq 1
   flush_on_last_del "yes"
   fast_io_fail_tmo 15
   dev_loss_tmo "infinity"
   path_selector "service-time 0"
   failback "immediate"
   detect_prio "no"
   user_friendly_names "no"
  }

Cc: Martin Wilck <mwilck@suse.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: DM_DEVEL-ML <dm-devel@lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
@mwilck
mwilck requested review from bmarzins and xosevp August 26, 2025 21:18
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

mwilck added 4 commits August 27, 2025 15:50
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
(cherry picked from commit 6781ae9)
Signed-off-by: Martin Wilck <mwilck@suse.com>

@bmarzins bmarzins left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks Good.

@xosevp xosevp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's fine by me.

Thanks.

@mwilck

mwilck commented Sep 4, 2025

Copy link
Copy Markdown
Collaborator Author

In case you're wondering, I'm waiting for a final coverity scan to finish. The coverity scan job is still sitting in the queue.

mwilck and others added 4 commits September 5, 2025 23:04
Coverity scan defect #488155.

Fixes: d041258 ("libmultipath: snprint_devices(): use udev_enumerate")
Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Only a negative return value from udev_enumerate_add_match_subsystem()
indicates an error.

Fixes: 7b47762 ("libmultipath: nvme: fix path detection for kernel 4.16")

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
If an error occurs, snprint_devices() should return a negative
error code, not 1.

Fixes: d041258 ("libmultipath: snprint_devices(): use udev_enumerate")

Suggested-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
@mwilck

mwilck commented Sep 9, 2025

Copy link
Copy Markdown
Collaborator Author

I added the fixes from the late Coverity code check, and one more fix that @bmarzins had pointed out. For simplicity, I did not rebase the code but just pushed the fixes on top.

@mwilck
mwilck merged commit f885001 into opensvc:master Sep 9, 2025
81 of 82 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

4 participants