On Wed, Aug 12, 2020 at 01:34:04PM +0200, [email protected] wrote:
> From: Martin Wilck <[email protected]>
> 
> If free_paths is false, make sure no references to the dropped
> multipath remain. Otherwise multipathd may crash later when
> trying to access these.
> 
Reviewed-by: Benjamin Marzinski <[email protected]>
> Signed-off-by: Martin Wilck <[email protected]>
> ---
>  libmultipath/structs.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/libmultipath/structs.c b/libmultipath/structs.c
> index da898b7..d227ec0 100644
> --- a/libmultipath/structs.c
> +++ b/libmultipath/structs.c
> @@ -258,6 +258,21 @@ free_multipath (struct multipath * mpp, enum 
> free_path_mode free_paths)
>               mpp->dmi = NULL;
>       }
>  
> +     if (!free_paths && mpp->pg) {
> +             struct pathgroup *pgp;
> +             struct path *pp;
> +             int i, j;
> +
> +             /*
> +              * Make sure paths carry no reference to this mpp any more
> +              */
> +             vector_foreach_slot(mpp->pg, pgp, i) {
> +                     vector_foreach_slot(pgp->paths, pp, j)
> +                             if (pp->mpp == mpp)
> +                                     pp->mpp = NULL;
> +             }
> +     }
> +
>       free_pathvec(mpp->paths, free_paths);
>       free_pgvec(mpp->pg, free_paths);
>       FREE_PTR(mpp->mpcontext);
> -- 
> 2.28.0

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to