@@ -2314,25 +2314,31 @@ should_skip_path(struct path *pp){
return 0;
}
-static int
-check_path_state(struct path *pp)
+static void
+start_path_check(struct path *pp)
{
- int newstate;
struct config *conf;
- newstate = path_sysfs_state(pp);
- if (newstate == PATH_UP) {
+ if (path_sysfs_state(pp) == PATH_UP) {
conf = get_multipath_config();
pthread_cleanup_push(put_multipath_config, conf);
- newstate = PATH_UNCHECKED;
- if (start_checker(pp, conf, 1, newstate) == 0)
- newstate = get_state(pp);
+ start_checker(pp, conf, 1, PATH_UNCHECKED);
pthread_cleanup_pop(1);
} else {
checker_clear_message(&pp->checker);
condlog(3, "%s: state %s, checker not called",
- pp->dev, checker_state_name(newstate));
+ pp->dev, checker_state_name(pp->sysfs_state));
}
+}
+
+static int
+check_path_state(struct path *pp)
+{
+ int newstate = pp->sysfs_state;
+ struct config *conf;
+
+ if (newstate == PATH_UP)
+ newstate = get_state(pp);
/*
* Wait for uevent for removed paths;
* some LLDDs like zfcp keep paths unavailable
@@ -2413,6 +2419,7 @@ do_check_path (struct vectors * vecs, struct path * pp)
pp->checkint = checkint;
};
+ start_path_check(pp);
newstate = check_path_state(pp);
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED)
return CHECK_PATH_SKIPPED;
@@ -2752,6 +2759,7 @@ handle_uninitialized_path(struct vectors * vecs, struct path * pp,
}
}
+ start_path_check(pp);
newstate = check_path_state(pp);
if (!strlen(pp->wwid) &&
check_path_state() is now split into start_path_check(), which calls path_sysfs_state() and if the path is up also calls start_checker(), and check_path_state() which gets the new state from either pp->sysfs_state or get_state(). Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> --- multipathd/main.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-)