{
struct multipath * cmpp;
struct multipath * cmpp_by_name;
+ char * mpp_feat, * cmpp_feat;
cmpp = find_mp_by_wwid(curmp, mpp->wwid);
cmpp_by_name = find_mp_by_alias(curmp, mpp->alias);
mpp->alias);
return;
}
- if (!mpp->no_path_retry &&
- (strlen(cmpp->features) != strlen(mpp->features) ||
- strcmp(cmpp->features, mpp->features))) {
+
+ if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF &&
+ mpp->no_path_retry != cmpp->no_path_retry) {
mpp->action = ACT_RELOAD;
- condlog(3, "%s: set ACT_RELOAD (features change)",
+ condlog(3, "%s: set ACT_RELOAD (no_path_retry change)",
mpp->alias);
return;
}
mpp->alias);
return;
}
+
+ if (mpp->retain_hwhandler != RETAIN_HWHANDLER_UNDEF &&
+ mpp->retain_hwhandler != cmpp->retain_hwhandler) {
+ mpp->action = ACT_RELOAD;
+ condlog(3, "%s: set ACT_RELOAD (retain_hwhandler change)",
+ mpp->alias);
+ return;
+ }
+
+ cmpp_feat = STRDUP(cmpp->features);
+ mpp_feat = STRDUP(mpp->features);
+ if (cmpp_feat && mpp_feat) {
+ remove_feature(&mpp_feat, "queue_if_no_path");
+ remove_feature(&mpp_feat, "retain_attached_hw_handler");
+ remove_feature(&cmpp_feat, "queue_if_no_path");
+ remove_feature(&cmpp_feat, "retain_attached_hw_handler");
+ if (strncmp(mpp_feat, cmpp_feat, PARAMS_SIZE)) {
+ mpp->action = ACT_RELOAD;
+ condlog(3, "%s: set ACT_RELOAD (features change)",
+ mpp->alias);
+ }
+ }
+ FREE(cmpp_feat);
+ FREE(mpp_feat);
+
if (!cmpp->selector || strncmp(cmpp->selector, mpp->selector,
strlen(mpp->selector))) {
mpp->action = ACT_RELOAD;