Re: [PATCH v2 66/74] libmultipath: update_pathvec_from_dm: handle pp->mpp mismatch

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

 



On Wed, Aug 12, 2020 at 01:35:10PM +0200, mwilck@xxxxxxxx wrote:
> From: Martin Wilck <mwilck@xxxxxxxx>
> 
> Treat this like a WWID mismatch.
> 
Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
> Signed-off-by: Martin Wilck <mwilck@xxxxxxxx>
> ---
>  libmultipath/structs_vec.c | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
> 
> diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
> index bd2d13b..e7a8d53 100644
> --- a/libmultipath/structs_vec.c
> +++ b/libmultipath/structs_vec.c
> @@ -123,6 +123,23 @@ bool update_pathvec_from_dm(vector pathvec, struct multipath *mpp,
>  			goto delete_pg;
>  
>  		vector_foreach_slot(pgp->paths, pp, j) {
> +
> +			if (pp->mpp && pp->mpp != mpp) {
> +				condlog(0, "BUG: %s: found path %s which is already in %s",
> +					mpp->alias, pp->dev, pp->mpp->alias);
> +
> +				/*
> +				 * Either we added this path to the other mpp
> +				 * explicitly, or we came by here earlier and
> +				 * decided it belonged there. In both cases,
> +				 * the path should remain in the other map,
> +				 * and be deleted here.
> +				 */
> +				must_reload = true;
> +				dm_fail_path(mpp->alias, pp->dev_t);
> +				vector_del_slot(pgp->paths, j--);
> +				continue;
> +			}
>  			pp->mpp = mpp;
>  
>  			/*
> @@ -170,6 +187,22 @@ bool update_pathvec_from_dm(vector pathvec, struct multipath *mpp,
>  					vector_del_slot(pgp->paths, j--);
>  					free_path(pp);
>  					must_reload = true;
> +				} else if (mpp_has_wwid && pp->wwid[0] != '\0'
> +					   && strcmp(mpp->wwid, pp->wwid)) {
> +					condlog(0, "%s: path %s WWID %s doesn't match, removing from map",
> +						mpp->wwid, pp->dev_t, pp->wwid);
> +					/*
> +					 * This path exists, but in the wrong map.
> +					 * We can't reload the map from here.
> +					 * Make sure it isn't used in this map
> +					 * any more, and let the checker re-add
> +					 * it as it sees fit.
> +					 */
> +					dm_fail_path(mpp->alias, pp->dev_t);
> +					vector_del_slot(pgp->paths, j--);
> +					orphan_path(pp, "WWID mismatch");
> +					pp->tick = 1;
> +					must_reload = true;
>  				} else {
>  					if (mpp_has_wwid && !strlen(pp->wwid)) {
>  						condlog(3, "%s: setting wwid from map: %s",
> -- 
> 2.28.0

--
dm-devel mailing list
dm-devel@xxxxxxxxxx
https://www.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