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.

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