Split out the code that updates a path's state and sets up the next
check time into its own function, update_path().

Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>
---
 multipathd/main.c | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/multipathd/main.c b/multipathd/main.c
index 488aa225..ac54ace4 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -2390,6 +2390,7 @@ sync_mpp(struct vectors * vecs, struct multipath *mpp, 
unsigned int ticks)
 }
 
 enum check_path_return {
+       CHECK_PATH_STARTED,
        CHECK_PATH_CHECKED,
        CHECK_PATH_SKIPPED,
        CHECK_PATH_REMOVED,
@@ -2629,14 +2630,8 @@ update_path_state (struct vectors * vecs, struct path * 
pp)
 }
 
 static int
-check_path (struct vectors * vecs, struct path * pp, unsigned int ticks,
-           time_t start_secs)
+check_path (struct path * pp, unsigned int ticks)
 {
-       int r;
-       unsigned int adjust_int, checkint, max_checkint;
-       struct config *conf;
-       time_t next_idx, goal_idx;
-
        if (pp->initialized == INIT_REMOVED)
                return CHECK_PATH_SKIPPED;
 
@@ -2645,18 +2640,27 @@ check_path (struct vectors * vecs, struct path * pp, 
unsigned int ticks,
        if (pp->tick)
                return CHECK_PATH_SKIPPED;
 
-       conf = get_multipath_config();
-       checkint = conf->checkint;
-       max_checkint = conf->max_checkint;
-       adjust_int = conf->adjust_int;
-       put_multipath_config(conf);
-
        if (pp->checkint == CHECKINT_UNDEF) {
+               struct config *conf;
+
                condlog(0, "%s: BUG: checkint is not set", pp->dev);
-               pp->checkint = checkint;
+               conf = get_multipath_config();
+               pp->checkint = conf->checkint;
+               put_multipath_config(conf);
        }
 
        start_path_check(pp);
+       return CHECK_PATH_STARTED;
+}
+
+static int
+update_path(struct vectors * vecs, struct path * pp, time_t start_secs)
+{
+       int r;
+       unsigned int adjust_int, max_checkint;
+       struct config *conf;
+       time_t next_idx, goal_idx;
+
        r = update_path_state(vecs, pp);
 
        /*
@@ -2685,6 +2689,10 @@ check_path (struct vectors * vecs, struct path * pp, 
unsigned int ticks,
        if (pp->tick == 1)
                return r;
 
+       conf = get_multipath_config();
+       max_checkint = conf->max_checkint;
+       adjust_int = conf->adjust_int;
+       put_multipath_config(conf);
        /*
         * every mpp has a goal_idx in the range of
         * 0 <= goal_idx < conf->max_checkint
@@ -2818,8 +2826,10 @@ check_paths(struct vectors *vecs, unsigned int ticks, 
int *num_paths_p)
                                if (!pp->mpp || pp->is_checked)
                                        continue;
                                pp->is_checked = true;
-                               rc = check_path(vecs, pp, ticks,
-                                               start_time.tv_sec);
+                               rc = check_path(pp, ticks);
+                               if (rc == CHECK_PATH_STARTED)
+                                       rc = update_path(vecs, pp,
+                                                        start_time.tv_sec);
                                if (rc == CHECK_PATH_CHECKED)
                                        (*num_paths_p)++;
                                if (++paths_checked % 128 == 0)
-- 
2.45.0


Reply via email to