}
}
checker_clear_message(c);
- state = path_offline(pp);
- if (state != PATH_UP) {
- condlog(3, "%s: path inaccessible", pp->dev);
- return state;
- }
if (daemon)
checker_set_async(c);
if (!conf->checker_timeout)
if (!pp)
return 0;
- path_state = path_offline(pp);
- if (path_state != PATH_UP) {
- pp->priority = PRIO_UNDEF;
- return 0;
- }
-
if (!pp->prio) {
select_prio(pp);
if (!pp->prio) {
extern int
pathinfo (struct path *pp, vector hwtable, int mask)
{
+ int path_state;
+
condlog(3, "%s: mask = 0x%x", pp->dev, mask);
/*
if (mask & DI_SYSFS && sysfs_pathinfo(pp))
return 1;
+ path_state = path_offline(pp);
+
/*
* fetch info not available through sysfs
*/
if (mask & DI_SERIAL)
get_geometry(pp);
- if (pp->bus == SYSFS_BUS_SCSI &&
+ if (path_state == PATH_UP && pp->bus == SYSFS_BUS_SCSI &&
scsi_ioctl_pathinfo(pp, mask))
goto blank;
goto blank;
if (mask & DI_CHECKER) {
- pp->state = get_state(pp, 0);
- if (pp->state == PATH_UNCHECKED || pp->state == PATH_WILD)
- goto blank;
+ if (path_state == PATH_UP) {
+ pp->state = get_state(pp, 0);
+ if (pp->state == PATH_UNCHECKED ||
+ pp->state == PATH_WILD)
+ goto blank;
+ } else {
+ condlog(3, "%s: path inaccessible", pp->dev);
+ pp->state = path_state;
+ }
}
/*
* Retrieve path priority, even for PATH_DOWN paths if it has never
* been successfully obtained before.
*/
- if (mask & DI_PRIO &&
- (pp->state != PATH_DOWN || pp->priority == PRIO_UNDEF)) {
- if (!strlen(pp->wwid))
- get_uid(pp);
- get_prio(pp);
+ if ((mask & DI_PRIO) && path_state == PATH_UP) {
+ if (pp->state != PATH_DOWN || pp->priority == PRIO_UNDEF) {
+ if (!strlen(pp->wwid))
+ get_uid(pp);
+ get_prio(pp);
+ } else {
+ pp->priority = PRIO_UNDEF;
+ }
}
- if (mask & DI_WWID && !strlen(pp->wwid))
+ if (path_state == PATH_UP && (mask & DI_WWID) && !strlen(pp->wwid))
get_uid(pp);
return 0;
*/
pp->tick = conf->checkint;
- newstate = get_state(pp, 1);
+ newstate = path_offline(pp);
+ if (newstate == PATH_UP)
+ newstate = get_state(pp, 1);
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED) {
condlog(2, "%s: unusable path", pp->dev);