Move the removal of an mpp from the mpvec into a separate function, remove_map_from_mpvec(). There should be no functional differences so far.
Signed-off-by: Martin Wilck <[email protected]> --- libmultipath/configure.c | 14 +++++++------- libmultipath/libmultipath.version | 1 + libmultipath/structs_vec.c | 26 +++++++++++++------------- libmultipath/structs_vec.h | 3 ++- multipath/main.c | 8 ++++---- multipathd/main.c | 17 ++++++++++------- 6 files changed, 37 insertions(+), 32 deletions(-) diff --git a/libmultipath/configure.c b/libmultipath/configure.c index baa1357..2d324ad 100644 --- a/libmultipath/configure.c +++ b/libmultipath/configure.c @@ -1140,7 +1140,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, if (!mpp->paths) { condlog(0, "%s: skip coalesce (no paths)", mpp->alias); - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); continue; } @@ -1172,7 +1172,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, if (cmd == CMD_DRY_RUN && mpp->action == ACT_UNDEF) mpp->action = ACT_DRY_RUN; if (setup_map(mpp, ¶ms, vecs)) { - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); continue; } @@ -1192,7 +1192,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, condlog(2, "%s: %s map", mpp->alias, (mpp->action == ACT_CREATE)? "ignoring" : "removing"); - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); continue; } else /* if (r == DOMAP_RETRY && !is_daemon) */ { ret = CP_RETRY; @@ -1201,7 +1201,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, } if (r == DOMAP_DRY) { if (!vector_alloc_slot(newmp)) { - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); goto out; } vector_set_slot(newmp, mpp); @@ -1224,20 +1224,20 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid, if (mpp->action != ACT_REJECT) { if (!vector_alloc_slot(newmp)) { - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); goto out; } vector_set_slot(newmp, mpp); } else - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); } ret = CP_OK; out: free(size_mismatch_seen); if (!mpvec) { vector_foreach_slot (newmp, mpp, i) - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); vector_free(newmp); } return ret; diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version index e5b7b83..9282ff2 100644 --- a/libmultipath/libmultipath.version +++ b/libmultipath/libmultipath.version @@ -160,6 +160,7 @@ global: remove_map; remove_map_by_alias; remove_map_callback; + remove_map_from_mpvec; remove_maps; remove_wwid; replace_wwids; diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c index 3a9ab58..7f5da21 100644 --- a/libmultipath/structs_vec.c +++ b/libmultipath/structs_vec.c @@ -420,11 +420,16 @@ void remove_map_callback(struct multipath *mpp __attribute__((unused))) { } -void -remove_map(struct multipath *mpp, vector pathvec, vector mpvec) +void remove_map_from_mpvec(const struct multipath *mpp, vector mpvec) { - int i; + int i = find_slot(mpvec, mpp); + if (i != -1) + vector_del_slot(mpvec, i); +} + +void remove_map(struct multipath *mpp, vector pathvec) +{ remove_map_callback(mpp); free_pathvec(mpp->paths, KEEP_PATHS); @@ -436,13 +441,6 @@ remove_map(struct multipath *mpp, vector pathvec, vector mpvec) */ orphan_paths(pathvec, mpp, "map removed internally"); - if (mpvec && - (i = find_slot(mpvec, (void *)mpp)) != -1) - vector_del_slot(mpvec, i); - - /* - * final free - */ free_multipath(mpp, KEEP_PATHS); } @@ -452,7 +450,8 @@ remove_map_by_alias(const char *alias, struct vectors * vecs) struct multipath * mpp = find_mp_by_alias(vecs->mpvec, alias); if (mpp) { condlog(2, "%s: removing map by alias", alias); - remove_map(mpp, vecs->pathvec, vecs->mpvec); + remove_map_from_mpvec(mpp, vecs->mpvec); + remove_map(mpp, vecs->pathvec); } } @@ -466,7 +465,7 @@ remove_maps(struct vectors * vecs) return; vector_foreach_slot (vecs->mpvec, mpp, i) - remove_map(mpp, vecs->pathvec, NULL); + remove_map(mpp, vecs->pathvec); vector_free(vecs->mpvec); vecs->mpvec = NULL; @@ -831,7 +830,8 @@ struct multipath *add_map_with_path(struct vectors *vecs, struct path *pp, return mpp; out: - remove_map(mpp, vecs->pathvec, vecs->mpvec); + remove_map_from_mpvec(mpp, vecs->mpvec); + remove_map(mpp, vecs->pathvec); return NULL; } diff --git a/libmultipath/structs_vec.h b/libmultipath/structs_vec.h index cb02d75..89e4213 100644 --- a/libmultipath/structs_vec.h +++ b/libmultipath/structs_vec.h @@ -24,7 +24,8 @@ int update_mpp_paths(struct multipath * mpp, vector pathvec); int update_multipath_strings (struct multipath *mpp, vector pathvec); void extract_hwe_from_path(struct multipath * mpp); -void remove_map (struct multipath *mpp, vector pathvec, vector mpvec); +void remove_map_from_mpvec(const struct multipath *mpp, vector mpvec); +void remove_map(struct multipath *mpp, vector pathvec); void remove_map_by_alias(const char *alias, struct vectors * vecs); void remove_maps (struct vectors * vecs); diff --git a/multipath/main.c b/multipath/main.c index f2adcde..58db288 100644 --- a/multipath/main.c +++ b/multipath/main.c @@ -181,15 +181,15 @@ get_dm_mpvec (enum mpath_cmds cmd, vector curmp, vector pathvec, char * refwwid) if (refwwid && strlen(refwwid) && strncmp(mpp->wwid, refwwid, WWID_SIZE)) { condlog(3, "skip map %s: out of scope", mpp->alias); - remove_map(mpp, pathvec, curmp); - i--; + vector_del_slot(curmp, i--); + remove_map(mpp, pathvec); continue; } if (update_multipath_table(mpp, pathvec, flags) != DMP_OK) { condlog(1, "error parsing map %s", mpp->wwid); - remove_map(mpp, pathvec, curmp); - i--; + vector_del_slot(curmp, i--); + remove_map(mpp, pathvec); continue; } diff --git a/multipathd/main.c b/multipathd/main.c index 49a1f25..2043ff3 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -480,7 +480,8 @@ remove_map_and_stop_waiter(struct multipath *mpp, struct vectors *vecs) condlog(3, "%s: removing map from internal tables", mpp->alias); if (!poll_dmevents) stop_waiter_thread(mpp); - remove_map(mpp, vecs->pathvec, vecs->mpvec); + remove_map_from_mpvec(mpp, vecs->mpvec); + remove_map(mpp, vecs->pathvec); } static void @@ -745,7 +746,8 @@ retry: fail: if (new_map && wait_for_events(mpp, vecs)) { condlog(0, "%s: failed to create new map", mpp->alias); - remove_map(mpp, vecs->pathvec, vecs->mpvec); + remove_map_from_mpvec(mpp, vecs->mpvec); + remove_map(mpp, vecs->pathvec); return 1; } @@ -1439,7 +1441,8 @@ rescan: goto fail; fail_map: - remove_map(mpp, vecs->pathvec, vecs->mpvec); + remove_map_from_mpvec(mpp, vecs->mpvec); + remove_map(mpp, vecs->pathvec); fail: orphan_path(pp, "failed to add path"); return 1; @@ -1837,8 +1840,8 @@ map_discovery (struct vectors * vecs) vector_foreach_slot (vecs->mpvec, mpp, i) if (update_multipath_table(mpp, vecs->pathvec, DI_DISCOVERY) != DMP_OK) { - remove_map(mpp, vecs->pathvec, vecs->mpvec); - i--; + vector_del_slot(vecs->mpvec, i--); + remove_map(mpp, vecs->pathvec); } return 0; @@ -3353,8 +3356,8 @@ configure (struct vectors * vecs, enum force_reload_types reload_type) */ vector_foreach_slot(vecs->mpvec, mpp, i) { if (wait_for_events(mpp, vecs)) { - remove_map(mpp, vecs->pathvec, vecs->mpvec); - i--; + vector_del_slot(vecs->mpvec, i--); + remove_map(mpp, vecs->pathvec); continue; } if (setup_multipath(vecs, mpp)) -- 2.52.0
