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 <[email protected]>
---
 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 fb3aa79..fb74923 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)
 {
@@ -504,18 +522,7 @@ update_multipath_table (struct multipath *mpp, vector 
pathvec, int flags)
                return r;
        }
 
-       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


Reply via email to