This patchset is based on discussions I had with Martin Wilck about my last, partially applied patchset. It's based on top of his mwilck-tip branch, 6a312b6c "GitHub workflows: native.yml: run root tests". These patches are mostly orthogonal to the libmp_mapinfo() work. I'll rebase them if further changes to that patchset stop them form applying cleanly. The first two patches are reposts of patches from my earlier patchset, redone to work with the new libmp_mapinfo() API. They make it possible to add maps by WWID with "multipathd add map". The rest of the patches are work and bugfixes related to refactoring checkerloop so that 1. multipath devices get resynced 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 resynced 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 checkint values 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 my multipath device (for initialized paths, the uninitialized paths are handled after all the adopted paths are handled). Items 1 & 2 are handled by patch 12 and preceding patches. Items 3 & 4 and handled by patch 19 and preceding patches. Item 5 is handled by patch 20 and 21. Benjamin Marzinski (22): libmultipath: rename dm_map_present_by_wwid() and add outputs multipathd: make cli_add_map() handle adding maps by WWID correctly multipathd: remove checker restart optimization multipathd: refactor path state getting code into a helper multipathd: handle uninitialized paths in new function multipathd: make check_path() static multipathd: remove redundant checks in handle_uninitialized_path() multipathd: check paths immediately after failing udev initialization multipathd: set pp->tick = max_checkint in handle_uninitialized_path multipathd: return 0 from path_check() if that path wasn't checked multipathd: reorder path state checks multipathd: adjust when mpp is synced with the kernel multipathd: resync map after setup_map in ev_remove_path multipathd: resync map after setup_map in resize_map multipathd: always resync map in reload_and_sync_map multipathd: correctly handle paths removed for a wwid change multipathd: handle changed wwid when adding partial path multipathd: don't read conf->checkint twice in check_path multipathd: make multipath devices manage their path check times multipathd: factor out actual path checking loop from checkerloop multipathd: check paths in order by mpp multipathd: clean up the correct wwid in check_path_wwid_change libmultipath/config.c | 13 + libmultipath/config.h | 1 + libmultipath/configure.c | 1 + libmultipath/devmapper.c | 16 +- libmultipath/devmapper.h | 2 +- libmultipath/libmultipath.version | 5 + libmultipath/structs.c | 1 + libmultipath/structs.h | 3 + libmultipath/structs_vec.c | 6 + libmultipath/valid.c | 2 +- multipathd/cli_handlers.c | 65 ++-- multipathd/main.c | 571 +++++++++++++++++++----------- multipathd/main.h | 2 +- tests/valid.c | 12 +- 14 files changed, 431 insertions(+), 269 deletions(-) -- 2.45.0