For the config values that exist in the proctol subsection of the device configs, paths will now also check the pctable when checking a hwentry for a value. Values in a matching pcentry will be used in preference to values in that hwentry. Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> --- libmultipath/propsel.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c index d2d70090..762b7fcb 100644 --- a/libmultipath/propsel.c +++ b/libmultipath/propsel.c @@ -73,6 +73,8 @@ do { \ static const char default_origin[] = "(setting: multipath internal)"; static const char hwe_origin[] = "(setting: storage device configuration)"; +static const char hwe_pce_origin[] = + "(setting: storage device procotol section)"; static const char multipaths_origin[] = "(setting: multipath.conf multipaths section)"; static const char conf_origin[] = @@ -146,6 +148,28 @@ do { \ } \ } while (0) +#define pp_set_hwe_pce(var) \ +do { \ + struct hwentry *_hwe; \ + struct pcentry *_pce; \ + int _i, _j; \ + \ + vector_foreach_slot(pp->hwe, _hwe, _i) { \ + vector_foreach_slot(_hwe->pctable, _pce, _j) { \ + if (_pce->type == (int)bus_protocol_id(pp) && _pce->var) { \ + pp->var = _pce->var; \ + origin = hwe_pce_origin; \ + goto out; \ + } \ + } \ + if (_hwe->var) { \ + pp->var = _hwe->var; \ + origin = hwe_origin; \ + goto out; \ + } \ + } \ +} while (0) + int select_mode(struct config *conf, struct multipath *mp) { const char *origin; @@ -775,7 +799,7 @@ int select_fast_io_fail(struct config *conf, struct path *pp) STRBUF_ON_STACK(buff); pp_set_ovr(fast_io_fail); - pp_set_hwe(fast_io_fail); + pp_set_hwe_pce(fast_io_fail); pp_set_conf(fast_io_fail); pp_set_default(fast_io_fail, DEFAULT_FAST_IO_FAIL); out: @@ -791,7 +815,7 @@ int select_dev_loss(struct config *conf, struct path *pp) STRBUF_ON_STACK(buff); pp_set_ovr(dev_loss); - pp_set_hwe(dev_loss); + pp_set_hwe_pce(dev_loss); pp_set_conf(dev_loss); pp->dev_loss = DEV_LOSS_TMO_UNSET; return 0; @@ -808,7 +832,7 @@ int select_eh_deadline(struct config *conf, struct path *pp) STRBUF_ON_STACK(buff); pp_set_ovr(eh_deadline); - pp_set_hwe(eh_deadline); + pp_set_hwe_pce(eh_deadline); pp_set_conf(eh_deadline); pp->eh_deadline = EH_DEADLINE_UNSET; /* not changing sysfs in default cause, so don't print anything */ -- 2.17.2 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel