Use an enum to represent the return value of coalesce_paths() to
improve readability of the code.
This patch doesn't introduce changes in behavior.

Signed-off-by: Martin Wilck <[email protected]>
---
 libmultipath/configure.c  | 17 ++++++++---------
 libmultipath/configure.h  | 10 ++++++++++
 multipath/main.c          |  5 +++--
 multipathd/cli_handlers.c |  3 ++-
 multipathd/main.c         |  2 +-
 5 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/libmultipath/configure.c b/libmultipath/configure.c
index f48664a0..5daf0c13 100644
--- a/libmultipath/configure.c
+++ b/libmultipath/configure.c
@@ -998,8 +998,8 @@ out:
 int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid,
                    int force_reload, enum mpath_cmds cmd)
 {
-       int r = 1;
-       int k, i;
+       int ret = CP_FAIL;
+       int k, i, r;
        int is_daemon = (cmd == CMD_NONE) ? 1 : 0;
        char params[PARAMS_SIZE];
        struct multipath * mpp;
@@ -1022,11 +1022,11 @@ int coalesce_paths (struct vectors * vecs, vector 
newmp, char * refwwid,
        }
 
        if (VECTOR_SIZE(pathvec) == 0)
-               return 0;
+               return CP_OK;
        size_mismatch_seen = calloc((VECTOR_SIZE(pathvec) - 1) / 64 + 1,
                                    sizeof(uint64_t));
        if (size_mismatch_seen == NULL)
-               return 1;
+               return CP_FAIL;
 
        vector_foreach_slot (pathvec, pp1, k) {
                int invalid;
@@ -1130,6 +1130,7 @@ int coalesce_paths (struct vectors * vecs, vector newmp, 
char * refwwid,
                                remove_map(mpp, vecs, 0);
                                continue;
                        } else /* if (r == DOMAP_RETRY && !is_daemon) */ {
+                               ret = CP_RETRY;
                                goto out;
                        }
                }
@@ -1172,10 +1173,8 @@ int coalesce_paths (struct vectors * vecs, vector newmp, 
char * refwwid,
 
                if (newmp) {
                        if (mpp->action != ACT_REJECT) {
-                               if (!vector_alloc_slot(newmp)) {
-                                       r = 1;
+                               if (!vector_alloc_slot(newmp))
                                        goto out;
-                               }
                                vector_set_slot(newmp, mpp);
                        }
                        else
@@ -1206,10 +1205,10 @@ int coalesce_paths (struct vectors * vecs, vector 
newmp, char * refwwid,
                                condlog(2, "%s: remove (dead)", alias);
                }
        }
-       r = 0;
+       ret = CP_OK;
 out:
        free(size_mismatch_seen);
-       return r;
+       return ret;
 }
 
 struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type)
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
index 8b56d33a..64520c57 100644
--- a/libmultipath/configure.h
+++ b/libmultipath/configure.h
@@ -23,6 +23,16 @@ enum actions {
        ACT_IMPOSSIBLE,
 };
 
+/*
+ * Return value of coalesce_paths()
+ * CP_RETRY is only used in non-daemon case (multipath).
+ */
+enum {
+       CP_OK = 0,
+       CP_FAIL,
+       CP_RETRY,
+};
+
 #define FLUSH_ONE 1
 #define FLUSH_ALL 2
 
diff --git a/multipath/main.c b/multipath/main.c
index 05b7bf0c..eb087482 100644
--- a/multipath/main.c
+++ b/multipath/main.c
@@ -537,7 +537,7 @@ configure (struct config *conf, enum mpath_cmds cmd,
        vector curmp = NULL;
        vector pathvec = NULL;
        struct vectors vecs;
-       int r = 1;
+       int r = 1, rc;
        int di_flag = 0;
        char * refwwid = NULL;
        char * dev = NULL;
@@ -752,8 +752,9 @@ configure (struct config *conf, enum mpath_cmds cmd,
        /*
         * core logic entry point
         */
-       r = coalesce_paths(&vecs, NULL, refwwid,
+       rc = coalesce_paths(&vecs, NULL, refwwid,
                           conf->force_reload, cmd);
+       r = rc == CP_RETRY ? -1 : rc == CP_OK ? 0 : 1;
 
 print_valid:
        if (cmd == CMD_VALID_PATH)
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
index a0d57a53..4fbd8841 100644
--- a/multipathd/cli_handlers.c
+++ b/multipathd/cli_handlers.c
@@ -803,7 +803,8 @@ cli_add_map (void * v, char ** reply, int * len, void * 
data)
                                    vecs->pathvec, &refwwid);
                        if (refwwid) {
                                if (coalesce_paths(vecs, NULL, refwwid,
-                                                  FORCE_RELOAD_NONE, CMD_NONE))
+                                                  FORCE_RELOAD_NONE, CMD_NONE)
+                                   != CP_OK)
                                        condlog(2, "%s: coalesce_paths failed",
                                                                        param);
                                dm_lib_release();
diff --git a/multipathd/main.c b/multipathd/main.c
index 77126f9e..2ea954ae 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -2371,7 +2371,7 @@ configure (struct vectors * vecs)
        ret = coalesce_paths(vecs, mpvec, NULL, force_reload, CMD_NONE);
        if (force_reload == FORCE_RELOAD_WEAK)
                force_reload = FORCE_RELOAD_YES;
-       if (ret) {
+       if (ret != CP_OK) {
                condlog(0, "configure failed while coalescing paths");
                goto fail;
        }
-- 
2.19.1

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to