@@ -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
+get_new_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,7 +2419,8 @@ do_check_path (struct vectors * vecs, struct path * pp)
pp->checkint = checkint;
};
- newstate = check_path_state(pp);
+ start_path_check(pp);
+ newstate = get_new_state(pp);
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED)
return CHECK_PATH_SKIPPED;
/*
@@ -2752,7 +2759,8 @@ handle_uninitialized_path(struct vectors * vecs, struct path * pp,
}
}
- newstate = check_path_state(pp);
+ start_path_check(pp);
+ newstate = get_new_state(pp);
if (!strlen(pp->wwid) &&
(pp->initialized == INIT_FAILED || pp->initialized == INIT_NEW) &&