Imported Upstream version 0.8.9
[platform/upstream/multipath-tools.git] / libmultipath / hwtable.c
index bb73a40..bd15710 100644 (file)
 #include "config.h"
 #include "pgpolicies.h"
 #include "prio.h"
+#include "hwtable.h"
 
 /*
  * Tuning suggestions on these parameters should go to
- * dm-devel@redhat.com
- * 
+ * dm-devel@redhat.com (subscribers-only, see README)
+ *
  * You are welcome to claim maintainership over a controller
  * family. Please mail the currently enlisted maintainer and
  * the upstream package maintainer.
+ *
+ * Please, use the TEMPLATE below to add new hardware.
+ *
+ * WARNING:
+ *
+ * Devices with a proprietary handler must also be included in
+ * the kernel side. Currently at drivers/scsi/scsi_dh.c
+ *
+ * Moreover, if a device needs a special treatment by the SCSI
+ * subsystem it should be included in drivers/scsi/scsi_devinfo.c
  */
-static struct hwentry default_hw[] = {
+
+#if 0
        /*
-        * Compellent Technologies, Inc.
+        * Copy this TEMPLATE to add new hardware.
+        *
+        * Keep only mandatory(.vendor and .product) and modified attributes.
+        * Attributes with default values must be removed.
+        * .vendor, .product, .revision and .bl_product are POSIX Extended regex.
+        *
+        * COMPANY_NAME
         *
-        * Maintainer : Jim Lester, Compellent
-        * Mail : jim.lester@compellent.com
+        * Maintainer: NAME <email>
         */
        {
-               .vendor        = "COMPELNT",
-               .product       = "Compellent Vol",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               /* Product Name */
+               .vendor        = "VENDOR",
+               .product       = "PRODUCT",
+               .revision      = "REVISION",
+               .bl_product    = "BL_PRODUCT",
+               .pgpolicy      = FAILOVER,
+               .uid_attribute = "ID_SERIAL",
+               .selector      = "service-time 0",
                .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .alias_prefix  = "mpath",
+               .features      = "0",
+               .hwhandler     = "0",
+               .prio_name     = PRIO_CONST,
+               .prio_args     = "",
+               .pgfailback    = -FAILBACK_MANUAL,
+               .rr_weight     = RR_WEIGHT_NONE,
+               .no_path_retry = NO_PATH_RETRY_UNDEF,
+               .minio         = 1000,
+               .minio_rq      = 1,
+               .flush_on_last_del = FLUSH_DISABLED,
+               .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
+               .fast_io_fail  = 5,
+               .dev_loss      = 600,
+               .retain_hwhandler = RETAIN_HWHANDLER_ON,
+               .detect_prio   = DETECT_PRIO_ON,
+               .detect_checker = DETECT_CHECKER_ON,
+               .deferred_remove = DEFERRED_REMOVE_OFF,
+               .delay_watch_checks = DELAY_CHECKS_OFF,
+               .delay_wait_checks = DELAY_CHECKS_OFF,
+               .skip_kpartx   = SKIP_KPARTX_OFF,
+               .max_sectors_kb = MAX_SECTORS_KB_UNDEF,
+               .ghost_delay   = GHOST_DELAY_OFF,
+       },
+#endif
+
+static struct hwentry default_hw[] = {
+       /*
+        * Generic NVMe devices
+        *
+        * Due to the parsing logic in find_hwe(), generic entries
+        * have to be put on top of this list, and more specific ones
+        * below.
+        */
+       {
+               /* Generic NVMe */
+               .vendor        = "NVME",
+               .product       = ".*",
+               .uid_attribute = DEFAULT_NVME_UID_ATTRIBUTE,
+               .checker_name  = NONE,
+               .retain_hwhandler = RETAIN_HWHANDLER_OFF,
        },
        /*
-        * Apple controller family
+        * Apple
         *
-        * Maintainer : Shyam Sundar
-        * Mail : g.shyamsundar@yahoo.co.in
+        * Maintainer: Shyam Sundar <g.shyamsundar@yahoo.co.in>
         */
        {
-               .vendor        = "APPLE*",
-               .product       = "Xserve RAID ",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               /* Xserve RAID */
+               .vendor        = "APPLE",
+               .product       = "Xserve RAID",
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DEFAULT_CHECKER,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        /*
-        * StorageWorks controller family
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
+        * HPE
         */
        {
+               /* 3PAR / Primera / Alletra 9000 */
                .vendor        = "3PARdata",
                .product       = "VV",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DEFAULT_CHECKER,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .hwhandler     = "1 alua",
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 18,
+               .fast_io_fail  = 10,
+               .dev_loss      = MAX_DEV_LOSS_TMO,
+               .vpd_vendor_id = VPD_VP_HP3PAR,
        },
        {
+               /* RA8000 / ESA12000 */
                .vendor        = "DEC",
                .product       = "HSG80",
-               .features      = "1 queue_if_no_path",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .hwhandler     = "1 hp_sw",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
                .checker_name  = HP_SW,
                .prio_name     = PRIO_HP_SW,
-               .prio_args     = NULL,
        },
        {
+               /* VIRTUAL ARRAY 7400 */
                .vendor        = "HP",
                .product       = "A6189A",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
+               /* MSA 1000/1500 and EVA 3000/5000, with old firmware */
                .vendor        = "(COMPAQ|HP)",
-               .product       = "(MSA|HSV)1.0.*",
-               .features      = "1 queue_if_no_path",
+               .product       = "(MSA|HSV)1[01]0",
                .hwhandler     = "1 hp_sw",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .minio         = 100,
                .checker_name  = HP_SW,
                .prio_name     = PRIO_HP_SW,
-               .prio_args     = NULL,
        },
        {
                /* MSA 1000/1500 with new firmware */
                .vendor        = "(COMPAQ|HP)",
                .product       = "MSA VOLUME",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
                /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
                .vendor        = "(COMPAQ|HP)",
-               .product       = "HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "(HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0)",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-               /* HP MSA2000 product family with old firmware */
+               /* MSA2000 family with old firmware */
                .vendor        = "HP",
-               .product       = "MSA2[02]12fc|MSA2012i",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "(MSA2[02]12fc|MSA2012i)",
                .pgpolicy      = MULTIBUS,
+               .no_path_retry = 18,
+       },
+       {
+               /* MSA2000 family with new firmware */
+               .vendor        = "HP",
+               .product       = "(MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME)",
+               .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 18,
-               .minio         = 100,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .prio_name     = PRIO_ALUA,
        },
        {
-               /* HP MSA2000 product family with new firmware */
+               /* MSA 1040, 1050, 1060, 2040, 2050 and 2060 families */
                .vendor        = "HP",
-               .product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "MSA [12]0[456]0 SA[NS]",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 18,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
-
        {
-               /* HP SVSP */
+               /* SAN Virtualization Services Platform */
                .vendor        = "HP",
                .product       = "HSVX700",
-               .features      = DEFAULT_FEATURES,
                .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
-
        {
-               /* HP Smart Array */
+               /* Smart Array */
                .vendor        = "HP",
-               .product       = "LOGICAL VOLUME.*",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "LOGICAL VOLUME",
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 12,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* HP P2000 family arrays */
+               /* P2000 family */
                .vendor        = "HP",
-               .product       = "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "(P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI)",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 18,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
+       },
+       {
+               /* StoreVirtual 4000 and 3200 families */
+               .vendor        = "LEFTHAND",
+               .product       = "(P4000|iSCSIDisk|FCDISK)",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 18,
+               .prio_name     = PRIO_ALUA,
+       },
+       {
+               /* Nimble Storage / HPE Alletra 6000 */
+               .vendor        = "Nimble",
+               .product       = "Server",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+       },
+               /* SGI */
+       {
+               /* Total Performance 9100 */
+               .vendor        = "SGI",
+               .product       = "TP9100",
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* Total Performance family */
+               .vendor        = "SGI",
+               .product       = "TP9[3457]00",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
+       },
+       {
+               /* (RDAC) InfiniteStorage */
+               .vendor        = "SGI",
+               .product       = "IS",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
+       },
+       {
+               /* (DDN) InfiniteStorage */
+               .vendor        = "SGI",
+               .product       = "^DD[46]A-",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
        },
        /*
-        * DDN controller family
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
+        * DataDirect Networks
         */
        {
+               /* SAN DataDirector */
                .vendor        = "DDN",
                .product       = "SAN DataDirector",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+       },
+       {
+               /* EF3010 */
+               .vendor        = "DDN",
+               .product       = "^EF3010",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+       {
+               /* EF3015 / S2A and SFA families */
+               .vendor        = "DDN",
+               .product       = "^(EF3015|S2A|SFA)",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       {
+               /*
+                * Nexenta COMSTAR
+                *
+                * Maintainer: Yacine Kheddache <yacine@alyseo.com>
+                */
+               .vendor        = "NEXENTA",
+               .product       = "COMSTAR",
+               .pgpolicy      = GROUP_BY_SERIAL,
+               .no_path_retry = 30,
+       },
+       {
+               /* Tegile IntelliFlash */
+               .vendor        = "TEGILE",
+               .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 10,
        },
        /*
-        * EMC / Clariion controller family
-        *
-        * Maintainer : Edward Goggin, EMC
-        * Mail : egoggin@emc.com
+        * Dell EMC
         */
        {
+               /* Symmetrix / DMX / VMAX / PowerMax */
                .vendor        = "EMC",
                .product       = "SYMMETRIX",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 6,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               .vendor        = "DGC",
-               .product       = ".*",
+               /* DGC CLARiiON CX/AX / VNX and Unity */
+               .vendor        = "^DGC",
+               .product       = "^(RAID|DISK|VRAID)",
                .bl_product    = "LUNZ",
-               .features      = "1 queue_if_no_path",
                .hwhandler     = "1 emc",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = (300 / DEFAULT_CHECKINT),
                .checker_name  = EMC_CLARIION,
                .prio_name     = PRIO_EMC,
-               .prio_args     = NULL,
        },
        {
+               /* Invista / VPLEX */
                .vendor        = "EMC",
                .product       = "Invista",
                .bl_product    = "LUNZ",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 5,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+       },
+       {
+               /* XtremIO */
+               .vendor        = "XtremIO",
+               .product       = "XtremApp",
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* SC Series, formerly Compellent */
+               .vendor        = "COMPELNT",
+               .product       = "Compellent Vol",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+       },
+       {
+               /* MD Series */
+               .vendor        = "DELL",
+               .product       = "^MD3",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
+       },
+       {
+               /* EMC PowerMax NVMe */
+               .vendor        = "NVME",
+               .product       = "^EMC PowerMax_",
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* PowerStore */
+               .vendor        = "DellEMC",
+               .product       = "PowerStore",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .prio_name     = PRIO_ALUA,
+               .hwhandler     = "1 alua",
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 3,
+               .fast_io_fail  = 15,
+       },
+       {
+               /* PowerVault ME4 */
+               .vendor        = "DellEMC",
+               .product       = "ME4",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .prio_name     = PRIO_ALUA,
+               .hwhandler     = "1 alua",
+               .pgfailback    = -FAILBACK_IMMEDIATE,
        },
        /*
-        * Fujitsu controller family
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
+        * Fujitsu
         */
        {
+               /* CentricStor Virtual Tape */
                .vendor        = "FSC",
                .product       = "CentricStor",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = GROUP_BY_SERIAL,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
+               /* ETERNUS family */
                .vendor        = "FUJITSU",
-               .product       = "ETERNUS_DX(L|400|8000)",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "ETERNUS_DX(H|L|M|400|8000)",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 10,
+               .prio_name     = PRIO_ALUA,
+       },
+       {
+               /* FibreCAT S80 */
+               .vendor        = "(EUROLOGC|EuroLogc)",
+               .product       = "FC2502",
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* ETERNUS 2000, 3000 and 4000 */
+               .vendor        = "FUJITSU",
+               .product       = "E[234]000",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 10,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
+       },
+       {
+               /* ETERNUS 6000 and 8000 */
+               .vendor        = "FUJITSU",
+               .product       = "E[68]000",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 10,
+       },
+       {
+               /*
+                * ETERNUS AB/HB
+                * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
+                */
+               .vendor        = "FUJITSU",
+               .product       = "ETERNUS_AHB",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        /*
-        * Hitachi controller family
+        * Hitachi Vantara
         *
-        * Maintainer : Matthias Rudolph
-        * Mail : matthias.rudolph@hds.com
+        * Maintainer: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com>
         */
        {
+               /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */
                .vendor        = "(HITACHI|HP)",
-               .product       = "OPEN-.*",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "^OPEN-",
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
+               /* AMS other than AMS 2000 */
                .vendor        = "HITACHI",
-               .product       = "DF.*",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "^DF",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
                .prio_name     = PRIO_HDS,
-               .prio_args     = NULL,
+       },
+       {
+               /* AMS 2000 and HUS 100 families */
+               .vendor        = "HITACHI",
+               .product       = "^DF600F",
+               .pgpolicy      = MULTIBUS,
        },
        /*
-        * IBM controller family
-        *
-        * Maintainer : Hannes Reinecke, SuSE
-        * Mail : hare@suse.de
+        * IBM
         */
        {
+               /* ProFibre 4000R */
                .vendor        = "IBM",
                .product       = "ProFibre 4000R",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* IBM FAStT 1722-600 */
+               /* DS4300 / FAStT600 */
                .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,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 300,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM DS4100 */
+               /* 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,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 300,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM DS3200 / DS3300 / DS3400 */
+               /* DS3000 / 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,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 300,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM DS4400 / DS4500 / FAStT700 */
+               /* DS4400 / DS4500 / FAStT700 / FAStT900 */
                .vendor        = "IBM",
                .product       = "^1742",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
+               /* DS3500 / DS3512 / DS3524 */
                .vendor        = "IBM",
-               .product       = "^1745|^1746",
+               .product       = "^1746",
                .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,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
+               .no_path_retry = 30,
+       },
+       {
+               /* DCS3860 */
+               .vendor        = "IBM",
+               .product       = "^1813",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-           /* IBM DS4700 */
+               /* DS3950 / DS4200 / DS4700 / DS5020 */
                .vendor        = "IBM",
                .product       = "^1814",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-           /* IBM DS4800 */
+               /* DS4800 */
                .vendor        = "IBM",
                .product       = "^1815",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-           /* IBM DS5000 */
+               /* DS5000 / DS5100 / DS5300 / DCS3700 */
                .vendor        = "IBM",
                .product       = "^1818",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM Netfinity Fibre Channel RAID Controller Unit */
+               /* Netfinity Fibre Channel RAID Controller Unit */
                .vendor        = "IBM",
                .product       = "^3526",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
-       },
-       {
-               /* IBM DS4200 / FAStT200 */
-               .vendor        = "IBM",
-               .product       = "^3542",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = GROUP_BY_SERIAL,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM ESS F20 aka Shark */
+               /* FAStT200 and FAStT500 */
                .vendor        = "IBM",
-               .product       = "^2105800",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = GROUP_BY_SERIAL,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .product       = "^(3542|3552)",
+               .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               /* IBM ESS F20 aka Shark */
+               /* Enterprise Storage Server(ESS) / Shark family */
                .vendor        = "IBM",
-               .product       = "^2105F20",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = GROUP_BY_SERIAL,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .product       = "^2105",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               .pgpolicy      = MULTIBUS,
        },
        {
-               /* IBM DS6000 */
+               /* DS6000 / DS6800 */
                .vendor        = "IBM",
                .product       = "^1750500",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-               /* IBM DS8000 */
+               /* DS8000 family */
                .vendor        = "IBM",
                .product       = "^2107900",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
        },
        {
-               /* IBM SAN Volume Controller */
+               // Storwize V5000 and V7000 lines / SAN Volume Controller (SVC) / Flex System V7000 /
+               // FlashSystem V840/V9000/5000/5100/5200/7200/9100/9200/9200R
                .vendor        = "IBM",
                .product       = "^2145",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-               /* IBM S/390 ECKD DASD */
+               /* PAV DASD ECKD */
                .vendor        = "IBM",
                .product       = "S/390 DASD ECKD",
-               .bl_product       = "S/390.*",
+               .bl_product    = "S/390",
                .uid_attribute = "ID_UID",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
                .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* IBM S/390 FBA DASD */
+               /* PAV DASD FBA */
                .vendor        = "IBM",
                .product       = "S/390 DASD FBA",
-               .bl_product       = "S/390.*",
+               .bl_product    = "S/390",
                .uid_attribute = "ID_UID",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
                .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* IBM IPR */
+               /* Power RAID */
                .vendor        = "IBM",
-               .product       = "^IPR.*",
-               .features      = "1 queue_if_no_path",
+               .product       = "^IPR",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-               /* IBM RSSM */
+               /* SAS RAID Controller Module (RSSM) */
                .vendor        = "IBM",
                .product       = "1820N00",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .minio         = 100,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-           /* IBM XIV Storage System */
-               .vendor        = "IBM",
-               .product       = "2810XIV",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
+               /* XIV Storage System / FlashSystem A9000/A9000R */
+               .vendor        = "(XIV|IBM)",
+               .product       = "(NEXTRA|2810XIV)",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = 15,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .minio         = 15,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
-       /*
-        * IBM Power Virtual SCSI Devices
-        *
-        * Maintainer : Brian King, IBM
-        * Mail : brking@linux.vnet.ibm.com
-        */
+       {
+               /* TMS RamSan / FlashSystem 710/720/810/820/840/900 */
+               .vendor        = "(TMS|IBM)",
+               .product       = "(RamSan|FlashSystem)",
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* (DDN) DCS9900, SONAS 2851-DR1 */
+               .vendor        = "IBM",
+               .product       = "^(DCS9900|2851)",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+               /*
+                * IBM Power Virtual SCSI Devices
+                *
+                * Maintainer: Brian King <brking@linux.vnet.ibm.com>
+                */
        {
                /* AIX VDASD */
                .vendor        = "AIX",
                .product       = "VDASD",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = (300 / DEFAULT_CHECKINT),
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
-               /* IBM 3303      NVDISK */
+               /* 3303 NVDISK */
                .vendor        = "IBM",
-               .product       = "3303      NVDISK",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = FAILOVER,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
+               .product       = "3303[ ]+NVDISK",
                .no_path_retry = (300 / DEFAULT_CHECKINT),
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
                /* AIX NVDISK */
                .vendor        = "AIX",
                .product       = "NVDISK",
-               .features      = DEFAULT_FEATURES,
                .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = (300 / DEFAULT_CHECKINT),
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
-       },
-       {
-               /* DELL MD3000 */
-               .vendor        = "DELL",
-               .product       = "MD3000",
-               .bl_product    = "Universal Xport",
-               .features      = "2 pg_init_retries 50",
-               .hwhandler     = "1 rdac",
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
-               .checker_name  = RDAC,
-               .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
        },
+       /*
+        * Lenovo
+        */
        {
-               /* DELL MD3000i */
-               .vendor        = "DELL",
-               .product       = "MD3000i",
+               /*
+                * DE Series
+                *
+                * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
+                */
+               .vendor        = "LENOVO",
+               .product       = "DE_Series",
                .bl_product    = "Universal Xport",
-               .features      = "2 pg_init_retries 50",
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
                .checker_name  = RDAC,
-               .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
-       },
-       {
-               /* DELL MD32xx */
-               .vendor        = "DELL",
-               .product       = "MD32xx",
-               .bl_product    = "Universal Xport",
                .features      = "2 pg_init_retries 50",
                .hwhandler     = "1 rdac",
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
-               .checker_name  = RDAC,
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
-       },
-       {
-               /* DELL MD32xxi */
-               .vendor        = "DELL",
-               .product       = "MD32xxi",
-               .bl_product    = "Universal Xport",
-               .features      = "2 pg_init_retries 50",
-               .hwhandler     = "1 rdac",
-               .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
-               .checker_name  = RDAC,
-               .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .no_path_retry = 30,
        },
        /*
-        * NETAPP controller family
-        *
-        * Maintainer : Dave Wysochanski
-        * Mail : davidw@netapp.com
+        * NetApp
         */
        {
+               /*
+                * ONTAP family
+                *
+                * Maintainer: Martin George <marting@netapp.com>
+                */
                .vendor        = "NETAPP",
-               .product       = "LUN.*",
-               .features      = "3 queue_if_no_path pg_init_retries 50",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "LUN",
+               .features      = "2 pg_init_retries 50",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .flush_on_last_del = FLUSH_ENABLED,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .minio         = 128,
                .dev_loss      = MAX_DEV_LOSS_TMO,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ONTAP,
-               .prio_args     = NULL,
-               .retain_hwhandler = RETAIN_HWHANDLER_ON,
                .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
-               .detect_prio   = DETECT_PRIO_ON,
        },
-       /*
-        * NEXENTA/COMSTAR controller family
-        *
-        * Maintainer : Yacine Kheddache
-        * Mail : yacine@alyseo.com
-        */
        {
-               .vendor        = "NEXENTA",
-               .product       = "COMSTAR",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = GROUP_BY_SERIAL,
+               /*
+                * SANtricity(RDAC) family
+                *
+                * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
+                */
+               .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",
+               .prio_name     = PRIO_RDAC,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = 30,
-               .minio         = 128,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+       },
+       {
+               /*
+                * SolidFir family
+                *
+                * Maintainer: PJ Waskiewicz <pj.waskiewicz@netapp.com>
+                */
+               .vendor        = "SolidFir",
+               .product       = "SSD SAN",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 24,
+       },
+       {
+               /*
+                * NVMe-FC namespace devices: MULTIBUS, queueing preferred
+                *
+                * The hwtable is searched backwards, so place this after "Generic NVMe"
+                */
+               .vendor        = "NVME",
+               .product       = "^NetApp ONTAP Controller",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
        },
        /*
-        * IBM NSeries (NETAPP) controller family
-        *
-        * Maintainer : Dave Wysochanski
-        * Mail : davidw@netapp.com
+        * NEC
         */
        {
-               .vendor        = "IBM",
-               .product       = "Nseries.*",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
+               /* M-Series */
+               .vendor        = "NEC",
+               .product       = "DISK ARRAY",
+               .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .minio         = 128,
-               .checker_name  = DIRECTIO,
-               .prio_name     = PRIO_ONTAP,
-               .prio_args     = NULL,
+               .prio_name     = PRIO_ALUA,
        },
        /*
-        * Pillar Data controller family
-        *
-        * Maintainer : Srinivasan Ramani
-        * Mail : sramani@pillardata.com
+        * Oracle
         */
-       {
-               .vendor        = "Pillar",
-               .product       = "Axiom.*",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               /*
+                * Pillar Data / Oracle FS
+                *
+                * Maintainer: Srinivasan Ramani <srinivas.ramani@oracle.com>
+                */
+       {
+               /* Axiom */
+               .vendor        = "^Pillar",
+               .product       = "^Axiom",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
-
-       /*
-        * SGI arrays
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
-        */
        {
-               .vendor        = "SGI",
-               .product       = "TP9[13]00",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               /* FS */
+               .vendor        = "^Oracle",
+               .product       = "^Oracle FS",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
        },
+               /* Sun - StorageTek */
        {
-               .vendor        = "SGI",
-               .product       = "TP9[45]00",
+               /* B210, B220, B240 and B280 */
+               .vendor        = "STK",
+               .product       = "BladeCtlr",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
-               .vendor        = "SGI",
-               .product       = "IS.*",
+               /* 9176, D173, D178, D210, D220, D240 and D280 */
+               .vendor        = "STK",
+               .product       = "OPENstorage",
                .bl_product    = "Universal Xport",
-               .features      = "2 pg_init_retries 50",
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = 15,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
-       /* NEC Storage M Series */
-       {
-               .vendor        = "NEC",
-               .product       = "DISK ARRAY",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 alua",
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
-               .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
-       },
-       /*
-        * STK arrays
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
-        */
        {
+               /* 6540 */
                .vendor        = "STK",
-               .product       = "OPENstorage D280",
+               .product       = "FLEXLINE 380",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
-       /*
-        * SUN arrays
-        *
-        * Maintainer : Christophe Varoqui
-        * Mail : christophe.varoqui@opensvc.com
-        */
        {
+               /* (Dot Hill) 3120, 3310, 3320, 3510 and 3511 */
                .vendor        = "SUN",
-               .product       = "(StorEdge 3510|T4)",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
+               .product       = "StorEdge 3",
                .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DIRECTIO,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
        },
        {
+               /* 6580 and 6780 */
                .vendor        = "SUN",
                .product       = "STK6580_6780",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
+               .bl_product    = "Universal Xport",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = TUR,
+               .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
-       },
-       {
-               .vendor        = "EUROLOGC",
-               .product       = "FC2502",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .checker_name  = DEFAULT_CHECKER,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
-       },
-       /*
-        * Pivot3 RAIGE
-        *
-        * Maintainer : Bart Brooks, Pivot3
-        * Mail : bartb@pivot3.com
-        */
-       {
-               .vendor        = "PIVOT3",
-               .product       = "RAIGE VOLUME",
-               .features      = "1 queue_if_no_path",
-               .hwhandler     = DEFAULT_HWHANDLER,
-               .pgpolicy      = MULTIBUS,
-               .pgfailback    = FAILBACK_UNDEF,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_UNDEF,
-               .minio         = 100,
-               .checker_name  = TUR,
-               .prio_name     = DEFAULT_PRIO,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
        {
+               /* 6130 / 6140 */
                .vendor        = "SUN",
-               .product       = "CSM200_R",
+               .product       = "CSM[12]00_R",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
-       /* SUN/LSI 2510, 2540, 2530, 2540 */
        {
+               /* 2500 / 2510 / 2530 / 2540 */
                .vendor        = "SUN",
                .product       = "LCSM100_[IEFS]",
                .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
-       /* StorageTek 6180 */
        {
+               /* 6180 */
                .vendor        = "SUN",
                .product       = "SUN_6180",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
+               .bl_product    = "Universal Xport",
                .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .minio         = DEFAULT_MINIO,
-               .minio_rq      = DEFAULT_MINIO_RQ,
                .checker_name  = RDAC,
+               .features      = "2 pg_init_retries 50",
+               .hwhandler     = "1 rdac",
                .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
        },
-       /* LSI/Engenio/NetApp E-Series RDAC storage
-        *
-        * Maintainer : Sean Stewart
-        * Mail : sean.stewart@netapp.com
-        */
        {
-               .vendor        = "(NETAPP|LSI|ENGENIO)",
-               .product       = "INF-01-00",
+               /* ArrayStorage */
+               .vendor        = "SUN",
+               .product       = "ArrayStorage",
                .bl_product    = "Universal Xport",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .checker_name  = RDAC,
                .features      = "2 pg_init_retries 50",
                .hwhandler     = "1 rdac",
+               .prio_name     = PRIO_RDAC,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 30,
+       },
+       {
+               /* ZFS Storage Appliances */
+               .vendor        = "SUN",
+               .product       = "(Sun Storage|ZFS Storage|COMSTAR)",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
+               .prio_name     = PRIO_ALUA,
                .no_path_retry = 30,
-               .checker_name  = RDAC,
-               .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
-               .detect_prio   = DETECT_PRIO_ON,
-               .retain_hwhandler = RETAIN_HWHANDLER_ON,
        },
+       /*
+        * Pivot3
+        *
+        * Maintainer: Bart Brooks <bartb@pivot3.com>
+        */
        {
-               .vendor        = "STK",
-               .product       = "FLEXLINE 380",
-               .bl_product    = "Universal Xport",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = "1 rdac",
+               /* Raige */
+               .vendor        = "PIVOT3",
+               .product       = "RAIGE VOLUME",
+               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               .pgpolicy      = MULTIBUS,
+       },
+       {
+               /* NexGen / vSTAC */
+               .vendor        = "(NexGen|Pivot3)",
+               .product       = "(TierStore|vSTAC)",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
+               .prio_name     = PRIO_ALUA,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .checker_name  = RDAC,
-               .prio_name     = PRIO_RDAC,
-               .prio_args     = NULL,
        },
+       /*
+        * Intel
+        */
        {
-               .vendor        = "Intel",
+               /* Multi-Flex */
+               .vendor        = "(Intel|INTEL)",
                .product       = "Multi-Flex",
-               .features      = DEFAULT_FEATURES,
+               .bl_product    = "VTrak V-LUN",
                .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
+       /*
+        * Linux-IO Target
+        */
        {
-               .vendor        = "DataCore",
+               /* Linux-IO Target */
+               .vendor        = "(LIO-ORG|SUSE)",
+               .product       = ".",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 12,
+               .prio_name     = PRIO_ALUA,
+       },
+       /*
+        * DataCore
+        */
+       {
+               /* SANmelody */
+               .vendor        = "DataCore",
                .product       = "SANmelody",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
        },
        {
-               .vendor        = "DataCore",
+               /* SANsymphony */
+               .vendor        = "DataCore",
                .product       = "Virtual Disk",
-               .features      = DEFAULT_FEATURES,
-               .hwhandler     = DEFAULT_HWHANDLER,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
-               .rr_weight     = RR_WEIGHT_NONE,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-               .checker_name  = TUR,
                .prio_name     = PRIO_ALUA,
-               .prio_args     = NULL,
+       },
+       /*
+        * Pure Storage
+        */
+       {
+               /* FlashArray */
+               .vendor        = "PURE",
+               .product       = "FlashArray",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .hwhandler     = "1 alua",
+               .prio_name     = PRIO_ALUA,
+               .fast_io_fail  = 10,
+               .max_sectors_kb = 4096,
+       },
+       /*
+        * Huawei
+        */
+       {
+               /* OceanStor V3-V6 */
+               // This config works with multibus and ALUA
+               // ALUA is required by HyperMetro
+               .vendor        = "HUAWEI",
+               .product       = "XSG1",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .no_path_retry = 15,
+       },
+       /*
+        * Kove
+        */
+       {
+               /* XPD */
+               .vendor        = "KOVE",
+               .product       = "XPD",
+               .pgpolicy      = MULTIBUS,
+       },
+       /*
+        * Infinidat
+        *
+        * Maintainer: Arnon Yaari <arnony@infinidat.com>
+        */
+       {
+               /* InfiniBox */
+               .vendor        = "NFINIDAT",
+               .product       = "InfiniBox",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = 30,
+               .prio_name     = PRIO_ALUA,
+               .selector      = "round-robin 0",
+               .rr_weight     = RR_WEIGHT_PRIO,
+               .no_path_retry = NO_PATH_RETRY_FAIL,
+               .minio         = 1,
+               .minio_rq      = 1,
+               .flush_on_last_del = FLUSH_ENABLED,
+               .fast_io_fail  = 15,
+               .dev_loss      = 15,
+       },
+       /*
+        * Kaminario
+        */
+       {
+               /* K2 */
+               .vendor        = "KMNRIO",
+               .product       = "K2",
+               .pgpolicy      = MULTIBUS,
+       },
+       /*
+        * StorCentric
+        */
+               /* Nexsan */
+       {
+               /* E-Series */
+               .vendor        = "NEXSAN",
+               .product       = "NXS-B0",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 15,
+       },
+       {
+               /* SATABeast / SATABoy */
+               .vendor        = "NEXSAN",
+               .product       = "SATAB",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 15,
+       },
+       {
+               /* NST / UNITY */
+               .vendor        = "Nexsan",
+               .product       = "(NestOS|NST5000)",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+               /* Violin Systems */
+       {
+               /* 3000 / 6000 Series */
+               .vendor        = "VIOLIN",
+               .product       = "SAN ARRAY$",
+               .pgpolicy      = GROUP_BY_SERIAL,
+               .no_path_retry = 30,
+       },
+       {
+               /* 3000 / 6000 Series - ALUA mode */
+               .vendor        = "VIOLIN",
+               .product       = "SAN ARRAY ALUA",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       {
+               /* FSP 7000 family */
+               .vendor        = "VIOLIN",
+               .product       = "CONCERTO ARRAY",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+               /* Xiotech */
+       {
+               /* Intelligent Storage Elements family */
+               .vendor        = "(XIOTECH|XIOtech)",
+               .product       = "ISE",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 12,
+       },
+       {
+               /* iglu blaze family */
+               .vendor        = "(XIOTECH|XIOtech)",
+               .product       = "IGLU DISK",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+       {
+               /* Magnitude family */
+               .vendor        = "(XIOTECH|XIOtech)",
+               .product       = "Magnitude",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+               /* Vexata */
+       {
+               /* VX */
+               .vendor        = "Vexata",
+               .product       = "VX",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+       /*
+        * Promise Technology
+        */
+       {
+               /* VTrak family */
+               .vendor        = "Promise",
+               .product       = "VTrak",
+               .bl_product    = "VTrak V-LUN",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       {
+               /* Vess family */
+               .vendor        = "Promise",
+               .product       = "Vess",
+               .bl_product    = "Vess V-LUN",
+               .hwhandler     = "1 alua",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       /*
+        * Infortrend Technology
+        */
+       {
+               /* EonStor / ESVA */
+               .vendor        = "^IFT",
+               .product       = ".*",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       /*
+        * Seagate Technology (Dot Hill Systems)
+        */
+       {
+               /* SANnet family */
+               .vendor        = "DotHill",
+               .product       = "SANnet",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+       {
+               /* R/Evolution family */
+               .vendor        = "DotHill",
+               .product       = "R/Evo",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       {
+               /* AssuredSAN family */
+               .vendor        = "DotHill",
+               .product       = "^DH",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
+       /*
+        * AccelStor
+        */
+       {
+               /* NeoSapphire */
+               .vendor        = "AStor",
+               .product       = "NeoSapphire",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 30,
+       },
+       /*
+        * INSPUR
+        */
+       {
+               /* AS5300/AS5500 G2 */
+               .vendor        = "INSPUR",
+               .product       = "MCS",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+       },
+       /*
+        * MacroSAN Technologies
+        */
+       {
+               /* MS family */
+               .vendor        = "MacroSAN",
+               .product       = "LU",
+               .pgpolicy      = GROUP_BY_PRIO,
+               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
        },
        /*
         * EOL
         */
        {
+               /* NULL */
                .vendor        = NULL,
                .product       = NULL,
-               .features      = NULL,
-               .hwhandler     = NULL,
-               .selector      = NULL,
-               .pgpolicy      = 0,
-               .pgfailback    = 0,
-               .rr_weight     = 0,
-               .no_path_retry = 0,
-               .minio         = 0,
-               .minio_rq      = 0,
-               .checker_name  = NULL,
-               .prio_name     = NULL,
-               .prio_args     = NULL,
        },
 };
 
-extern int
-setup_default_hwtable (vector hw)
+int setup_default_hwtable(vector hw)
 {
        int r = 0;
        struct hwentry * hwe = default_hw;