Re: [PATCH 1/7] multipathd: remove missing paths on startup

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

 



On Wed, 2021-10-20 at 14:15 -0500, Benjamin Marzinski wrote:
> If a path device was removed from the system while multipathd was not
> running, multipathd would not remove the path from the multipath
> table
> on start-up, or on a weak reconfigure. update_pathvec_from_dm() would
> return that a reload was necessary, but that information wasn't
> propigated back to where it could be used to reload the device.
> 
> Multipath devices now remember if they need to be reloaded, and if
> so,
> force_reload is set in select_action().  This means that even when
> configure is called with FORCE_RELOAD_WEAK, these devices will still
> be
> reloaded.
> 
> Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>

Reviewed-by: Martin Wilck <mwilck@xxxxxxxx>

(I found the subject of this patch somewhat disconcerting, because it
describes what your patch set is supposed to prevent - mistakenly
deleting paths. But I understand you meant *completely* missing paths,
i.e. paths that aren't present in sysfs).

> ---
>  libmultipath/configure.c   | 2 ++
>  libmultipath/devmapper.c   | 2 ++
>  libmultipath/structs.h     | 1 +
>  libmultipath/structs_vec.c | 1 +
>  4 files changed, 6 insertions(+)
> 
> diff --git a/libmultipath/configure.c b/libmultipath/configure.c
> index eb8ec1bd..f1a890af 100644
> --- a/libmultipath/configure.c
> +++ b/libmultipath/configure.c
> @@ -715,6 +715,8 @@ void select_action (struct multipath *mpp, const
> struct _vector *curmp,
>  
>         cmpp = find_mp_by_wwid(curmp, mpp->wwid);
>         cmpp_by_name = find_mp_by_alias(curmp, mpp->alias);
> +       if (mpp->need_reload || (cmpp && cmpp->need_reload))
> +               force_reload = 1;
>  
>         if (!cmpp_by_name) {
>                 if (cmpp) {
> diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
> index c05dc201..3e1a7260 100644
> --- a/libmultipath/devmapper.c
> +++ b/libmultipath/devmapper.c
> @@ -522,6 +522,8 @@ freeout:
>  addout:
>         dm_task_destroy (dmt);
>  
> +       if (r)
> +               mpp->need_reload = false;
>         return r;
>  }
>  
> diff --git a/libmultipath/structs.h b/libmultipath/structs.h
> index 399540e7..d0b266b7 100644
> --- a/libmultipath/structs.h
> +++ b/libmultipath/structs.h
> @@ -355,6 +355,7 @@ struct multipath {
>         int retain_hwhandler;
>         int deferred_remove;
>         bool in_recovery;
> +       bool need_reload;
>         int san_path_err_threshold;
>         int san_path_err_forget_rate;
>         int san_path_err_recovery_time;
> diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
> index 85d97ac1..e52db0c4 100644
> --- a/libmultipath/structs_vec.c
> +++ b/libmultipath/structs_vec.c
> @@ -237,6 +237,7 @@ bool update_pathvec_from_dm(vector pathvec,
> struct multipath *mpp,
>                 free_pathgroup(pgp, KEEP_PATHS);
>                 must_reload = true;
>         }
> +       mpp->need_reload = mpp->need_reload || must_reload;
>         return must_reload;
>  }
>  


--
dm-devel mailing list
dm-devel@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/dm-devel





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

  Powered by Linux