This is a combo patch. Reorder keyworks as in code and manpage for "(NETAPP|LSI|ENGENIO)"/"INF-01-00", and clone its configuration to ALL other RDAC devices. There are only two differences in all rdac devices. And they look minor: .features and .no_path_retry devices keyword values ======= ============== ==================== 3 .features = "1 queue_if_no_path", 5 .no_path_retry = 15, 1 .no_path_retry = 30, 3 .no_path_retry = 300, 10 .no_path_retry = NO_PATH_RETRY_QUEUE, "queue_if_no_path" is identical to the "no_path_retry" keyword. So "queue_if_no_path" can be replaced by "no_path_retry = XX" And there are just six devices with: 6 .features = "2 pg_init_retries 50", Sean Stewart, from NetApp, provided more detailed information: "The pg_init_retries value should be good for all RDAC devices, and can be synced, the no_path_retry should also be fine. I don’t think that there’s necessarily an “ideal” value for it, and may be more of a user preference type of thing, but I personally don’t see anything wrong with having that value on all RDAC devices, as well. It’s easy enough to change in the conf file if an end user needs a different value." I think the pg_init_retries parameter is set as such because part of scsi_dh_rdac’s path activation involves sending a Mode Select page 0x2C to change the ownership. If the array is already processing one, it will return with a vendor unique check condition (05/91/36), which returns SCSI_DH_RETRY." As for the no_path_retry, we’ve seen scenarios where both paths can be temporarily unavailable during a storage firmware upgrade, usually because udev processing has not added the path from one controller before the path from the second controller goes away. This is just to give it some time to settle in cases like that, so I/O can continue. The value of 30 was suggested by my predecessor, but I think is largely arbitrary." Cc: Sean Stewart <Sean.Stewart@xxxxxxxxxx> Cc: Benjamin Marzinski <bmarzins@xxxxxxxxxx> Cc: Hannes Reinecke <hare@xxxxxxx> Cc: Christophe Varoqui <christophe.varoqui@xxxxxxxxxxx> Cc: device-mapper development <dm-devel@xxxxxxxxxx> Signed-off-by: Xose Vazquez Perez <xose.vazquez@xxxxxxxxx> --- libmultipath/hwtable.c | 152 +++++++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 69 deletions(-) diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c index f7cd456..cc0cfd4 100644 --- a/libmultipath/hwtable.c +++ b/libmultipath/hwtable.c @@ -224,37 +224,37 @@ static struct hwentry default_hw[] = { .vendor = "DELL", .product = "MD3000", .bl_product = "Universal Xport", - .features = "2 pg_init_retries 50", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 15, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { .vendor = "DELL", .product = "(MD32xx|MD36xx)", .bl_product = "Universal Xport", - .features = "2 pg_init_retries 50", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 15, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { .vendor = "DELL", .product = "(MD34xx|MD38xx)", .bl_product = "Universal Xport", - .features = "2 pg_init_retries 50", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 15, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, /* * Fujitsu @@ -320,112 +320,117 @@ static struct hwentry default_hw[] = { .vendor = "IBM", .product = "^1722-600", .bl_product = "Universal Xport", - .features = "1 queue_if_no_path", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 300, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS4100 / FAStT100 */ .vendor = "IBM", .product = "^1724", .bl_product = "Universal Xport", - .features = "1 queue_if_no_path", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 300, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS3200 / DS3300 / DS3400 / Boot DS */ .vendor = "IBM", .product = "^1726", .bl_product = "Universal Xport", - .features = "1 queue_if_no_path", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 300, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS4400 / DS4500 / FAStT700 / FAStT900 */ .vendor = "IBM", .product = "^1742", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS3500 / DS3512 / DS3524 */ .vendor = "IBM", .product = "^(1745|1746)", .bl_product = "Universal Xport", - .features = "2 pg_init_retries 50", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 15, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS3950 / DS4200 / DS4700 / DS5020 */ .vendor = "IBM", .product = "^1814", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS4800 */ .vendor = "IBM", .product = "^1815", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS5000 / DS5100 / DS5300 / DCS3700 */ .vendor = "IBM", .product = "^1818", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* Netfinity Fibre Channel RAID Controller Unit */ .vendor = "IBM", .product = "^3526", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* DS4200 / FAStT200 */ @@ -582,13 +587,13 @@ static struct hwentry default_hw[] = { .vendor = "(NETAPP|LSI|ENGENIO)", .product = "INF-01-00", .bl_product = "Universal Xport", + .pgpolicy = GROUP_BY_PRIO, + .checker_name = RDAC, .features = "2 pg_init_retries 50", .hwhandler = "1 rdac", - .pgpolicy = GROUP_BY_PRIO, + .prio_name = PRIO_RDAC, .pgfailback = -FAILBACK_IMMEDIATE, .no_path_retry = 30, - .checker_name = RDAC, - .prio_name = PRIO_RDAC, }, /* * Nexenta @@ -618,25 +623,26 @@ static struct hwentry default_hw[] = { .vendor = "SGI", .product = "TP9[345]00", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* InfiniteStorage ??? */ .vendor = "SGI", .product = "IS", .bl_product = "Universal Xport", - .features = "2 pg_init_retries 50", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = 15, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, /* * NEC @@ -678,22 +684,25 @@ static struct hwentry default_hw[] = { .vendor = "STK", .product = "OPENstorage D280", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { .vendor = "STK", .product = "FLEXLINE 380", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { .vendor = "SUN", @@ -705,46 +714,51 @@ static struct hwentry default_hw[] = { .vendor = "SUN", .product = "STK6580_6780", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* 6140 */ .vendor = "SUN", .product = "CSM200_R", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { /* 2510 / 2530 / 2540 */ .vendor = "SUN", .product = "LCSM100_[IEFS]", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, { .vendor = "SUN", .product = "SUN_6180", .bl_product = "Universal Xport", - .hwhandler = "1 rdac", .pgpolicy = GROUP_BY_PRIO, - .pgfailback = -FAILBACK_IMMEDIATE, - .no_path_retry = NO_PATH_RETRY_QUEUE, .checker_name = RDAC, + .features = "2 pg_init_retries 50", + .hwhandler = "1 rdac", .prio_name = PRIO_RDAC, + .pgfailback = -FAILBACK_IMMEDIATE, + .no_path_retry = 30, }, /* * Pivot3 -- 2.7.4 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel