coalesce_paths(): use symbolic return value
authorMartin Wilck <mwilck@suse.com>
Mon, 10 Dec 2018 09:49:56 +0000 (10:49 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Mon, 10 Dec 2018 23:41:06 +0000 (00:41 +0100)
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.

Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
libmultipath/configure.c
libmultipath/configure.h
multipath/main.c
multipathd/cli_handlers.c
multipathd/main.c

index f48664a..5daf0c1 100644 (file)
@@ -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)
index 8b56d33..64520c5 100644 (file)
@@ -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
 
index 98fee1c..1d34b87 100644 (file)
@@ -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)
index a0d57a5..4fbd884 100644 (file)
@@ -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();
index 04f02d9..fd1ac8f 100644 (file)
@@ -2366,7 +2366,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;
        }