From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Mon, 13 Jul 2020 13:07:43 +0200 Subject: [PATCH] libmultipath: fix mpp->hwe handling in sync_paths() This is anologous to 1f96269 ("multipathd: fix mpp->hwe handling on path removal") f6839eb ("multipathd: fix mpp->hwe handling when paths are freed") When paths are removed from a map, we need to make sure that mpp->hwe doesn't become stale. Reported-by: Lixiaokeng Signed-off-by: Martin Wilck Signed-off-by: Benjamin Marzinski --- libmultipath/structs_vec.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c index cde4dbe6..ede14297 100644 --- a/libmultipath/structs_vec.c +++ b/libmultipath/structs_vec.c @@ -260,6 +260,8 @@ void sync_paths(struct multipath *mpp, vector pathvec) } if (!found) { condlog(3, "%s dropped path %s", mpp->alias, pp->dev); + if (mpp->hwe == pp->hwe) + mpp->hwe = NULL; vector_del_slot(mpp->paths, i--); orphan_path(pp, "path removed externally"); } @@ -267,6 +269,8 @@ void sync_paths(struct multipath *mpp, vector pathvec) update_mpp_paths(mpp, pathvec); vector_foreach_slot (mpp->paths, pp, i) pp->mpp = mpp; + if (mpp->hwe == NULL) + extract_hwe_from_path(mpp); } int -- 2.17.2