multipath-tools: standardize all RDAC devices
authorXose Vazquez Perez <xose.vazquez@gmail.com>
Wed, 10 Aug 2016 16:20:32 +0000 (18:20 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 16 Aug 2016 07:18:53 +0000 (09:18 +0200)
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@netapp.com>
Cc: Benjamin Marzinski <bmarzins@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: device-mapper development <dm-devel@redhat.com>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
libmultipath/hwtable.c

index ed6e02b..6ab0ed6 100644 (file)
@@ -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 */
@@ -574,13 +579,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
@@ -610,25 +615,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
@@ -670,22 +676,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",
@@ -697,46 +706,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