Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>
---
 libmultipath/configure.c  |  2 +-
 libmultipath/structs.h    |  8 +++++++-
 multipathd/cli_handlers.c | 16 ++++++++--------
 multipathd/main.c         | 35 ++++++++++++++++++-----------------
 4 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/libmultipath/configure.c b/libmultipath/configure.c
index 191df1ef..534ca7f4 100644
--- a/libmultipath/configure.c
+++ b/libmultipath/configure.c
@@ -1018,7 +1018,7 @@ int domap(struct multipath *mpp, char *params, int 
is_daemon)
                                mpp->action = ACT_NOTHING;
                        else {
                                conf = get_multipath_config();
-                               mpp->wait_for_udev = 1;
+                               mpp->wait_for_udev = UDEV_WAIT_STARTED;
                                mpp->uev_wait_tick = conf->uev_wait_timeout;
                                put_multipath_config(conf);
                        }
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
index 9d22bdd0..1b5a878b 100644
--- a/libmultipath/structs.h
+++ b/libmultipath/structs.h
@@ -430,6 +430,12 @@ enum prio_update_type {
        PRIO_UPDATE_MARGINAL,
 };
 
+enum udev_wait_states {
+       UDEV_WAIT_DONE = 0,
+       UDEV_WAIT_STARTED,
+       UDEV_WAIT_RELOAD,
+};
+
 struct multipath {
        char wwid[WWID_SIZE];
        char alias_old[WWID_SIZE];
@@ -441,7 +447,7 @@ struct multipath {
        int bestpg;
        int queuedio;
        int action;
-       int wait_for_udev;
+       enum udev_wait_states wait_for_udev;
        int uev_wait_tick;
        int pgfailback;
        int failback_tick;
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
index 0849fe51..4bcc82ac 100644
--- a/multipathd/cli_handlers.c
+++ b/multipathd/cli_handlers.c
@@ -812,7 +812,7 @@ cli_reload(void *v, struct strbuf *reply, void *data)
        if (!mpp)
                return -ENODEV;
 
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing reload",
                        mpp->alias);
                return 1;
@@ -841,7 +841,7 @@ cli_resize(void *v, struct strbuf *reply, void *data)
        if (!mpp)
                return -ENODEV;
 
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing resize",
                        mpp->alias);
                return 1;
@@ -1046,7 +1046,7 @@ cli_suspend(void * v, struct strbuf *reply, void * data)
        if (!mpp)
                return 1;
 
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing suspend",
                        mpp->alias);
                return 1;
@@ -1078,7 +1078,7 @@ cli_resume(void * v, struct strbuf *reply, void * data)
                return 1;
 
        udev_flags = (mpp->skip_kpartx)? MPATH_UDEV_NO_KPARTX_FLAG : 0;
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing resume",
                        mpp->alias);
                return 1;
@@ -1131,7 +1131,7 @@ cli_reassign (void * v, struct strbuf *reply, void * data)
        if (!mpp)
                return 1;
 
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing reassign",
                        mpp->alias);
                return 1;
@@ -1406,7 +1406,7 @@ static int cli_set_marginal(void * v, struct strbuf 
*reply, void * data)
 
        condlog(2, "%s: set marginal path %s (operator)",
                pp->mpp->alias, pp->dev_t);
-       if (pp->mpp->wait_for_udev) {
+       if (pp->mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, failing set marginal",
                        pp->mpp->alias);
                return 1;
@@ -1433,7 +1433,7 @@ static int cli_unset_marginal(void * v, struct strbuf 
*reply, void * data)
 
        condlog(2, "%s: unset marginal path %s (operator)",
                pp->mpp->alias, pp->dev_t);
-       if (pp->mpp->wait_for_udev) {
+       if (pp->mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, "
                        "failing unset marginal", pp->mpp->alias);
                return 1;
@@ -1461,7 +1461,7 @@ static int cli_unset_all_marginal(void * v, struct strbuf 
*reply, void * data)
        if (!mpp)
                return -ENODEV;
 
-       if (mpp->wait_for_udev) {
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
                condlog(2, "%s: device not fully created, "
                        "failing unset all marginal", mpp->alias);
                return 1;
diff --git a/multipathd/main.c b/multipathd/main.c
index 4e26861d..3b4e61fc 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -331,7 +331,7 @@ static bool unblock_reconfigure(void)
  */
 void remove_map_callback(struct multipath *mpp)
 {
-       if (mpp->wait_for_udev > 0)
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE)
                unblock_reconfigure();
 }
 
@@ -871,7 +871,7 @@ ev_add_map (char * dev, const char * alias, struct vectors 
* vecs)
        mpp = find_mp_by_alias(vecs->mpvec, alias);
 
        if (mpp) {
-               if (mpp->wait_for_udev > 1) {
+               if (mpp->wait_for_udev == UDEV_WAIT_RELOAD) {
                        condlog(2, "%s: performing delayed actions",
                                mpp->alias);
                        if (update_map(mpp, vecs, 0))
@@ -882,8 +882,8 @@ ev_add_map (char * dev, const char * alias, struct vectors 
* vecs)
                reassign_maps = conf->reassign_maps;
                put_multipath_config(conf);
                dm_get_info(mpp->alias, &mpp->dmi);
-               if (mpp->wait_for_udev) {
-                       mpp->wait_for_udev = 0;
+               if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
+                       mpp->wait_for_udev = UDEV_WAIT_DONE;
                        if (!need_to_delay_reconfig(vecs) &&
                            unblock_reconfigure())
                                return 0;
@@ -1241,7 +1241,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int 
need_do_map)
        }
        if (mpp)
                trigger_path_udev_change(pp, true);
-       if (mpp && mpp->wait_for_udev &&
+       if (mpp && mpp->wait_for_udev != UDEV_WAIT_DONE &&
            (pathcount(mpp, PATH_UP) > 0 ||
             (pathcount(mpp, PATH_GHOST) > 0 &&
              path_get_tpgs(pp) != TPGS_IMPLICIT &&
@@ -1249,7 +1249,7 @@ ev_add_path (struct path * pp, struct vectors * vecs, int 
need_do_map)
                /* if wait_for_udev is set and valid paths exist */
                condlog(3, "%s: delaying path addition until %s is fully 
initialized",
                        pp->dev, mpp->alias);
-               mpp->wait_for_udev = 2;
+               mpp->wait_for_udev = UDEV_WAIT_RELOAD;
                orphan_path(pp, "waiting for create to complete");
                return 0;
        }
@@ -1433,8 +1433,8 @@ ev_remove_path (struct path *pp, struct vectors * vecs, 
int need_do_map)
                    flush_map_nopaths(mpp, vecs))
                        goto out;
 
-               if (mpp->wait_for_udev) {
-                       mpp->wait_for_udev = 2;
+               if (mpp->wait_for_udev != UDEV_WAIT_DONE) {
+                       mpp->wait_for_udev = UDEV_WAIT_RELOAD;
                        retval = REMOVE_PATH_DELAY;
                        goto out;
                }
@@ -1646,8 +1646,8 @@ uev_update_path (struct uevent *uev, struct vectors * 
vecs)
                if (needs_ro_update(mpp, ro)) {
                        condlog(2, "%s: update path write_protect to '%d' 
(uevent)", uev->kernel, ro);
 
-                       if (mpp->wait_for_udev)
-                               mpp->wait_for_udev = 2;
+                       if (mpp->wait_for_udev != UDEV_WAIT_DONE)
+                               mpp->wait_for_udev = UDEV_WAIT_RELOAD;
                        else {
                                if (ro == 1)
                                        pp->mpp->force_readonly = 1;
@@ -1661,7 +1661,7 @@ uev_update_path (struct uevent *uev, struct vectors * 
vecs)
                        }
                }
                if (auto_resize != AUTO_RESIZE_NEVER && mpp &&
-                   !mpp->wait_for_udev) {
+                   mpp->wait_for_udev == UDEV_WAIT_DONE) {
                        struct pathgroup *pgp;
                        struct path *pp2;
                        unsigned int i, j;
@@ -2018,13 +2018,13 @@ followover_should_failback(struct multipath *mpp)
 static bool
 missing_uev_wait_tick(struct multipath *mpp, bool *timed_out)
 {
-       if (mpp->wait_for_udev && --mpp->uev_wait_tick <= 0) {
-               int wait = mpp->wait_for_udev;
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE && --mpp->uev_wait_tick <= 0) {
+               enum udev_wait_states wait = mpp->wait_for_udev;
 
-               mpp->wait_for_udev = 0;
+               mpp->wait_for_udev = UDEV_WAIT_DONE;
                *timed_out = true;
                condlog(0, "%s: timeout waiting on creation uevent. enabling 
reloads", mpp->alias);
-               return wait > 1;
+               return wait == UDEV_WAIT_RELOAD;
        }
        return false;
 }
@@ -2635,7 +2635,8 @@ static bool update_mpp_prio(struct multipath *mpp)
        enum prio_update_type prio_update = mpp->prio_update;
        mpp->prio_update = PRIO_UPDATE_NONE;
 
-       if (mpp->wait_for_udev || prio_update == PRIO_UPDATE_NONE)
+       if (mpp->wait_for_udev != UDEV_WAIT_DONE ||
+           prio_update == PRIO_UPDATE_NONE)
                return false;
        condlog(4, "prio refresh");
 
@@ -3246,7 +3247,7 @@ need_to_delay_reconfig(struct vectors * vecs)
                return 0;
 
        vector_foreach_slot(vecs->mpvec, mpp, i) {
-               if (mpp->wait_for_udev)
+               if (mpp->wait_for_udev != UDEV_WAIT_DONE)
                        return 1;
        }
        return 0;
-- 
2.46.2


Reply via email to