condlog(3, "%s: get_state", pp->dev);
if (!checker_selected(c)) {
- if (daemon)
- pathinfo(pp, conf->hwtable, DI_SYSFS);
+ if (daemon || pp->sysdev == NULL) {
+ if (pathinfo(pp, conf->hwtable, DI_SYSFS) != 0) {
+ condlog(3, "%s: couldn't get sysfs pathinfo",
+ pp->dev);
+ return PATH_UNCHECKED;
+ }
+ }
select_checker(pp);
if (!checker_selected(c)) {
condlog(3, "%s: No checker selected", pp->dev);
#define FILE_NAME_SIZE 256
#define CMDSIZE 160
-#define LOG_MSG(a,b) \
- if (strlen(b)) condlog(a, "%s: %s - %s", pp->mpp->alias, pp->dev, b);
+#define LOG_MSG(a, b) \
+do { \
+ if (pp->offline) \
+ condlog(a, "%s: %s - path offline", pp->mpp->alias, pp->dev); \
+ else if (strlen(b)) \
+ condlog(a, "%s: %s - %s", pp->mpp->alias, pp->dev, b); \
+} while(0)
pthread_cond_t exit_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t exit_mutex = PTHREAD_MUTEX_INITIALIZER;
struct path * pp;
char empty_buff[WWID_SIZE] = {0};
char params[PARAMS_SIZE] = {0};
+ int retries = 3;
int start_waiter = 0;
if (strstr(devname, "..") != NULL) {
/*
* deal with asynchronous uevents :((
*/
- if (mpp->action == ACT_RELOAD) {
+ if (mpp->action == ACT_RELOAD && retries-- > 0) {
condlog(0, "%s: uev_add_path sleep", mpp->alias);
sleep(1);
update_mpp_paths(mpp, vecs->pathvec);
goto rescan;
}
+ else if (mpp->action == ACT_RELOAD)
+ condlog(0, "%s: giving up reload", mpp->alias);
else
goto fail_map;
}
start_waiter_thread(mpp, vecs))
goto fail_map;
- condlog(2, "%s path added to devmap %s", devname, mpp->alias);
- return 0;
+ if (retries >= 0) {
+ condlog(2, "%s path added to devmap %s", devname, mpp->alias);
+ return 0;
+ }
+ else
+ return 1;
fail_map:
remove_map(mpp, vecs, 1);