Re: [PATCH v2 12/22] multipathd: split check_paths into two functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2024-09-12 at 17:49 -0400, Benjamin Marzinski wrote:
> Instead of checking and updating each path, the checkerloop now
> starts
> the checkers on all the paths in check_paths(), and then goes back
> and
> updates all the paths in update_paths(). Since the async checkers use
> an
> absolute time to wait for before returning PATH_PENDING, only one
> checker actually needs to be waited for in update_paths(). The rest
> will
> already have reached their timeout when update_path() is called for
> them.
> 
> The check_paths() and update_paths() loop over the pathvec instead of
> looping through the multipath device paths to avoid having to restart
> checking of the device paths when the multipath device needs to be
> resynced while updating the paths.
> 
> Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
> ---
>  libmultipath/structs.h |  10 +++-
>  multipathd/main.c      | 105 +++++++++++++++++++--------------------
> --
>  2 files changed, 57 insertions(+), 58 deletions(-)
> 
> diff --git a/libmultipath/structs.h b/libmultipath/structs.h
> index d8231e95..af8e31e9 100644
> --- a/libmultipath/structs.h
> +++ b/libmultipath/structs.h
> @@ -314,6 +314,14 @@ enum recheck_wwid_states {
>  	RECHECK_WWID_ON = YNU_YES,
>  };
>  
> +enum check_path_states {
> +	CHECK_PATH_UNCHECKED,
> +	CHECK_PATH_STARTED,
> +	CHECK_PATH_CHECKED,
> +	CHECK_PATH_SKIPPED,
> +	CHECK_PATH_REMOVED,
> +};
> +
>  struct vpd_vendor_page {
>  	int pg;
>  	const char *name;
> @@ -395,7 +403,7 @@ struct path {
>  	int fast_io_fail;
>  	unsigned int dev_loss;
>  	int eh_deadline;
> -	bool is_checked;
> +	enum check_path_states is_checked;
>  	bool can_use_env_uid;
>  	unsigned int checker_timeout;
>  	/* configlet pointers */
> diff --git a/multipathd/main.c b/multipathd/main.c
> index 45d40559..9519b6c5 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -2389,13 +2389,6 @@ sync_mpp(struct vectors * vecs, struct
> multipath *mpp, unsigned int ticks)
>  	do_sync_mpp(vecs, mpp);
>  }
>  
> -enum check_path_return {
> -	CHECK_PATH_STARTED,
> -	CHECK_PATH_CHECKED,
> -	CHECK_PATH_SKIPPED,
> -	CHECK_PATH_REMOVED,
> -};
> -
>  static int
>  update_path_state (struct vectors * vecs, struct path * pp)
>  {
> @@ -2735,6 +2728,7 @@ check_uninitialized_path(struct path * pp,
> unsigned int ticks)
>  	conf = get_multipath_config();
>  	retrigger_tries = conf->retrigger_tries;
>  	pp->tick = conf->max_checkint;
> +	pp->checkint = conf->checkint;
>  	put_multipath_config(conf);
>  
>  	if (pp->initialized == INIT_MISSING_UDEV) {
> @@ -2778,6 +2772,10 @@ update_uninitialized_path(struct vectors *
> vecs, struct path * pp)
>  	int newstate, ret;
>  	struct config *conf;
>  
> +	if (pp->initialized != INIT_NEW && pp->initialized !=
> INIT_FAILED &&
> +	    pp->initialized != INIT_MISSING_UDEV)
> +		return CHECK_PATH_SKIPPED;
> +
>  	newstate = get_new_state(pp);
>  

It seems to me that this hunk and the previous one belong into 11/22.

Martin





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux