This patchset is based on discussions I had with Martin Wilck about my last, partially applied patchset. 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 10 and preceding patches. Items 3 & 4 and handled by patch 17 and preceding patches. Item 5 is handled by patch 18 and 19. Changes in v5 (all from Martin's suggestions): 19: Changed checker variable name from ct->waited_for to ct->checked_state 23: New patch to change the directio checker to use timestamps to check for timeout. Changes in v4 (all from Martin's suggestions): 09: Changed commit message and fixed incorrect comment 10: Moved getting checkint from config to the if clause where its used 11 & 12: Moved setting pp->checkint from 12 to 11 14: Added comment about when refresh_all is set. Changes in v3: 0: adapt to 27053732 'fixup "libmultipath: use libmp_pathinfo() in update_multipath_table()"'. This is identical to 1d564df4 ("multipathd: adjust when mpp is synced with the kernel") on mwilck/tip. 11: fix commit message (Martin) 17: use symbolic return code (Martin) Changes in v2 (old patch number in quotes): 01: change from returning minor number to dm info (Martin) 02: adapt to change in patch 01 05 (05-07): squash into one commit (Martin) 08 (10): fix commit message (Matin) 10 (12): rename do_check_mpp amd check_mpp 11 (13): move the code that saved the path name to right before it was removed (Martin) 14 (16): use symbolic return codes (Martin) 15 (17): set path state to PATH_UNCHECKED when orphaned, and skip paths in INIT_REMOVED in sync_map_state() (Martin) 17 (19): clear pp->pending_ticks in check_path() if the path is delayed instead of pending. Use a different equation to check if we need to modify the ticks, that can adjust the ticks on every check. adapt to change in patch 14 18 (20): adapt to change in patch 14 19 (21): adapt to change in patch 10 and 14 20 (22): Add fixes trailer Benjamin Marzinski (23): 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: use timestamps to tell when the directio checker timed out libmultipath/checkers.c | 47 +++- libmultipath/checkers.h | 10 +- libmultipath/checkers/directio.c | 177 +++++++++---- libmultipath/checkers/tur.c | 79 +++--- libmultipath/discovery.c | 97 ++++--- libmultipath/discovery.h | 6 +- libmultipath/libmultipath.version | 4 +- libmultipath/print.c | 2 +- libmultipath/propsel.c | 1 + libmultipath/structs.h | 21 +- multipathd/cli_handlers.c | 1 + multipathd/main.c | 409 ++++++++++++++++++------------ tests/directio.c | 182 +++++++++---- 13 files changed, 676 insertions(+), 360 deletions(-) -- 2.45.0