Split off the part of the function that does the disassembly from the part calling libmp_mapinfo(). This makes it possible to call the function from a context where the map info is already available. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> --- libmultipath/libmultipath.version | 1 + libmultipath/structs_vec.c | 31 +++++++++++++++++++------------ libmultipath/structs_vec.h | 2 ++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version index 5b8f9e0..54b5a23 100644 --- a/libmultipath/libmultipath.version +++ b/libmultipath/libmultipath.version @@ -206,6 +206,7 @@ global: uninit_config; update_mpp_paths; update_multipath_strings; + update_multipath_table__; update_multipath_table; update_queue_mode_add_path; update_queue_mode_del_path; diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c index 295dac8..731b1bc 100644 --- a/libmultipath/structs_vec.c +++ b/libmultipath/structs_vec.c @@ -480,6 +480,24 @@ done: condlog(2, "%s: no hwe found", mpp->alias); } +int +update_multipath_table__ (struct multipath *mpp, vector pathvec, int flags, + const char *params, const char *status) +{ + if (disassemble_map(pathvec, params, mpp)) { + condlog(2, "%s: cannot disassemble map", mpp->alias); + return DMP_ERR; + } + + if (disassemble_status(status, mpp)) + condlog(2, "%s: cannot disassemble status", mpp->alias); + + /* FIXME: we should deal with the return value here */ + update_pathvec_from_dm(pathvec, mpp, flags); + + return DMP_OK; +} + int update_multipath_table (struct multipath *mpp, vector pathvec, int flags) { @@ -506,18 +524,7 @@ update_multipath_table (struct multipath *mpp, vector pathvec, int flags) } else if (size != mpp->size) condlog(0, "%s: size changed from %llu to %llu", mpp->alias, size, mpp->size); - if (disassemble_map(pathvec, params, mpp)) { - condlog(2, "%s: cannot disassemble map", mpp->alias); - return DMP_ERR; - } - - if (disassemble_status(status, mpp)) - condlog(2, "%s: cannot disassemble status", mpp->alias); - - /* FIXME: we should deal with the return value here */ - update_pathvec_from_dm(pathvec, mpp, flags); - - return DMP_OK; + return update_multipath_table__(mpp, pathvec, flags, params, status); } static struct path *find_devt_in_pathgroups(const struct multipath *mpp, diff --git a/libmultipath/structs_vec.h b/libmultipath/structs_vec.h index dbc4305..01f5dc4 100644 --- a/libmultipath/structs_vec.h +++ b/libmultipath/structs_vec.h @@ -33,6 +33,8 @@ struct multipath * add_map_with_path (struct vectors * vecs, const struct multipath *current_mpp); void update_queue_mode_del_path(struct multipath *mpp); void update_queue_mode_add_path(struct multipath *mpp); +int update_multipath_table__ (struct multipath *mpp, vector pathvec, int flags, + const char *params, const char *status); int update_multipath_table (struct multipath *mpp, vector pathvec, int flags); int update_multipath_status (struct multipath *mpp); vector get_used_hwes(const struct _vector *pathvec); -- 2.45.2