On Mon, 2024-10-14 at 23:28 -0400, Benjamin Marzinski wrote:
> 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(-)
>
Sorry again for the long delay. I've applied this series, except patch
23/23, to my "queue" branch.
Regards
Martin