[dm-devel] [PATCH v2 40/42] libmultipath: free_multipath(): remove mpp references
mwilck at suse.com
mwilck at suse.com
Wed Aug 12 11:34:04 UTC 2020
From: Martin Wilck <mwilck at suse.com>
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 <mwilck at suse.com>
---
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
More information about the dm-devel
mailing list