libmultipath: EMC PowerMax NVMe device config
[multipath-tools/.git] / libmultipath / hwtable.c
index d8e2c01..ca217e6 100644 (file)
@@ -7,6 +7,7 @@
 #include "config.h"
 #include "pgpolicies.h"
 #include "prio.h"
+#include "hwtable.h"
 
 /*
  * Tuning suggestions on these parameters should go to
  * Moreover, if a device needs a special treatment by the SCSI
  * subsystem it should be included in drivers/scsi/scsi_devinfo.c
  */
+
+#if 0
+       /*
+        * 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: NAME <email>
+        */
+       {
+               /* 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,
+               .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
         *
-        * Maintainer : Shyam Sundar
-        * Mail : g.shyamsundar@yahoo.co.in
+        * Maintainer: Shyam Sundar <g.shyamsundar@yahoo.co.in>
         */
        {
+               /* Xserve RAID */
                .vendor        = "APPLE",
                .product       = "Xserve RAID",
                .pgpolicy      = MULTIBUS,
@@ -42,6 +107,7 @@ static struct hwentry default_hw[] = {
         * HPE
         */
        {
+               /* 3PAR */
                .vendor        = "3PARdata",
                .product       = "VV",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -49,6 +115,8 @@ static struct hwentry default_hw[] = {
                .hwhandler     = "1 alua",
                .prio_name     = PRIO_ALUA,
                .no_path_retry = 18,
+               .fast_io_fail  = 10,
+               .dev_loss      = MAX_DEV_LOSS_TMO,
        },
        {
                /* RA8000 / ESA12000 */
@@ -112,9 +180,9 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
        },
        {
-               /* MSA 1040/2040 family */
+               /* MSA 1040, 1050, 2040 and 2050 families */
                .vendor        = "HP",
-               .product       = "MSA [12]040 SA[NS]",
+               .product       = "MSA [12]0[45]0 SA[NS]",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .no_path_retry = 18,
@@ -147,29 +215,84 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
        },
        {
-               /* StoreVirtual 4000 family */
+               /* StoreVirtual 4000 and 3200 families */
                .vendor        = "LEFTHAND",
-               .product       = "^(P4000|iSCSIDisk)",
+               .product       = "(P4000|iSCSIDisk|FCDISK)",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .no_path_retry = 18,
                .prio_name     = PRIO_ALUA,
        },
+       {
+               /* Nimble Storage */
+               .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,
+       },
        /*
         * DataDirect Networks
         */
        {
+               /* SAN DataDirector */
                .vendor        = "DDN",
                .product       = "SAN DataDirector",
                .pgpolicy      = MULTIBUS,
        },
        {
+               /* 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,
@@ -181,14 +304,14 @@ static struct hwentry default_hw[] = {
         * Dell EMC
         */
        {
-               /* Symmetrix / DMX / VMAX */
+               /* Symmetrix / DMX / VMAX / PowerMax */
                .vendor        = "EMC",
                .product       = "SYMMETRIX",
                .pgpolicy      = MULTIBUS,
                .no_path_retry = 6,
        },
        {
-               /* DGC CLARiiON CX/AX / EMC VNX and Unity */
+               /* DGC CLARiiON CX/AX / VNX and Unity */
                .vendor        = "^DGC",
                .product       = "^(RAID|DISK|VRAID)",
                .bl_product    = "LUNZ",
@@ -208,38 +331,26 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 5,
        },
        {
+               /* XtremIO */
                .vendor        = "XtremIO",
                .product       = "XtremApp",
                .pgpolicy      = MULTIBUS,
        },
        {
                /*
-                * Dell SC Series, formerly Compellent
+                * SC Series, formerly Compellent
                 *
-                * Maintainer : Sean McGinnis
-                * Mail : sean_mcginnis@dell.com
+                * Maintainer: Sean McGinnis <sean_mcginnis@dell.com>
                 */
                .vendor        = "COMPELNT",
                .product       = "Compellent Vol",
                .pgpolicy      = MULTIBUS,
                .no_path_retry = NO_PATH_RETRY_QUEUE,
-       },
-               /* MD Series */
-       {
-               .vendor        = "DELL",
-               .product       = "MD3000",
-               .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,
        },
        {
+               /* MD Series */
                .vendor        = "DELL",
-               .product       = "(MD32xx|MD36xx)",
+               .product       = "^MD3",
                .bl_product    = "Universal Xport",
                .pgpolicy      = GROUP_BY_PRIO,
                .checker_name  = RDAC,
@@ -250,26 +361,22 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
-               .vendor        = "DELL",
-               .product       = "(MD34xx|MD38xx)",
-               .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,
        },
        /*
         * Fujitsu
         */
        {
+               /* CentricStor Virtual Tape */
                .vendor        = "FSC",
                .product       = "CentricStor",
                .pgpolicy      = GROUP_BY_SERIAL,
        },
        {
+               /* ETERNUS family */
                .vendor        = "FUJITSU",
                .product       = "ETERNUS_DX(H|L|M|400|8000)",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -284,41 +391,54 @@ static struct hwentry default_hw[] = {
                .pgpolicy      = MULTIBUS,
        },
        {
+               /* ETERNUS 2000, 3000 and 4000 */
                .vendor        = "FUJITSU",
-               .product       = "E[248]000",
+               .product       = "E[234]000",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .no_path_retry = 10,
                .prio_name     = PRIO_ALUA,
        },
+       {
+               /* ETERNUS 6000 and 8000 */
+               .vendor        = "FUJITSU",
+               .product       = "E[68]000",
+               .pgpolicy      = MULTIBUS,
+               .no_path_retry = 10,
+       },
        /*
-        * Hitachi
+        * Hitachi Vantara
         *
-        * Maintainer : Matthias Rudolph
-        * Mail : matthias.rudolph@hds.com
+        * Maintainer: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com>
         */
        {
-               /* USP-V, HUS VM, VSP, VSP G1000 and VSP GX00 families */
+               /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */
                .vendor        = "(HITACHI|HP)",
                .product       = "^OPEN-",
                .pgpolicy      = MULTIBUS,
        },
        {
-               /* AMS 2000 and HUS 100 families */
-               .vendor        = "(HITACHI|HP)",
+               /* AMS other than AMS 2000 */
+               .vendor        = "HITACHI",
                .product       = "^DF",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .prio_name     = PRIO_HDS,
        },
+       {
+               /* AMS 2000 and HUS 100 families */
+               .vendor        = "HITACHI",
+               .product       = "^DF600F",
+               .pgpolicy      = MULTIBUS,
+       },
        /*
         * IBM
         *
-        * Maintainer : Hannes Reinecke
-        * Mail : hare@suse.de
+        * Maintainer: Hannes Reinecke <hare@suse.de>
         */
        {
+               /* ProFibre 4000R */
                .vendor        = "IBM",
                .product       = "ProFibre 4000R",
                .pgpolicy      = MULTIBUS,
@@ -467,7 +587,7 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
-               /* Enterprise Storage Server / Shark family */
+               /* Enterprise Storage Server(ESS) / Shark family */
                .vendor        = "IBM",
                .product       = "^2105",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
@@ -490,7 +610,7 @@ static struct hwentry default_hw[] = {
                .pgpolicy      = MULTIBUS,
        },
        {
-               /* Storwize family / SAN Volume Controller / Flex System V7000 / FlashSystem V840/V9000 */
+               /* Storwize family / SAN Volume Controller / Flex System V7000 / FlashSystem V840/V9000/9100 */
                .vendor        = "IBM",
                .product       = "^2145",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
@@ -499,20 +619,24 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
        },
        {
+               /* PAV DASD ECKD */
                .vendor        = "IBM",
                .product       = "S/390 DASD ECKD",
                .bl_product    = "S/390",
                .uid_attribute = "ID_UID",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = MULTIBUS,
+               .checker_name  = DIRECTIO,
        },
        {
+               /* PAV DASD FBA */
                .vendor        = "IBM",
                .product       = "S/390 DASD FBA",
                .bl_product    = "S/390",
                .uid_attribute = "ID_UID",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = MULTIBUS,
+               .checker_name  = DIRECTIO,
        },
        {
                /* Power RAID */
@@ -535,20 +659,19 @@ static struct hwentry default_hw[] = {
        },
        {
                /* XIV Storage System / FlashSystem A9000/A9000R */
-               .vendor        = "IBM",
-               .product       = "2810XIV",
+               .vendor        = "(XIV|IBM)",
+               .product       = "(NEXTRA|2810XIV)",
                .no_path_retry = NO_PATH_RETRY_QUEUE,
                .pgpolicy      = MULTIBUS,
        },
        {
-               /* FlashSystem 710/720/810/820/840/900 */
-               .vendor        = "IBM",
-               .product       = "FlashSystem",
-               .no_path_retry = NO_PATH_RETRY_FAIL,
+               /* TMS RamSan / FlashSystem 710/720/810/820/840/900 */
+               .vendor        = "(TMS|IBM)",
+               .product       = "(RamSan|FlashSystem)",
                .pgpolicy      = MULTIBUS,
        },
        {
-               /* DDN */
+               /* (DDN) DCS9900, SONAS 2851-DR1 */
                .vendor        = "IBM",
                .product       = "^(DCS9900|2851)",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -559,10 +682,10 @@ static struct hwentry default_hw[] = {
                /*
                 * IBM Power Virtual SCSI Devices
                 *
-                * Maintainer : Brian King
-                * Mail : brking@linux.vnet.ibm.com
+                * Maintainer: Brian King <brking@linux.vnet.ibm.com>
                 */
        {
+               /* AIX VDASD */
                .vendor        = "AIX",
                .product       = "VDASD",
                .pgpolicy      = MULTIBUS,
@@ -575,6 +698,7 @@ static struct hwentry default_hw[] = {
                .no_path_retry = (300 / DEFAULT_CHECKINT),
        },
        {
+               /* AIX NVDISK */
                .vendor        = "AIX",
                .product       = "NVDISK",
                .hwhandler     = "1 alua",
@@ -583,6 +707,26 @@ static struct hwentry default_hw[] = {
                .no_path_retry = (300 / DEFAULT_CHECKINT),
                .prio_name     = PRIO_ALUA,
        },
+        /*
+         * Lenovo
+         */
+        {
+                /*
+                * DE Series
+                *
+                * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
+                */
+                .vendor        = "LENOVO",
+                .product       = "DE_Series",
+                .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,
+        },
        /*
         * NetApp
         */
@@ -590,8 +734,7 @@ static struct hwentry default_hw[] = {
                /*
                 * ONTAP family
                 *
-                * Maintainer : Martin George
-                * Mail : marting@netapp.com
+                * Maintainer: Martin George <marting@netapp.com>
                 */
                .vendor        = "NETAPP",
                .product       = "LUN",
@@ -602,13 +745,13 @@ static struct hwentry default_hw[] = {
                .flush_on_last_del = FLUSH_ENABLED,
                .dev_loss      = MAX_DEV_LOSS_TMO,
                .prio_name     = PRIO_ONTAP,
+               .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
        },
        {
                /*
                 * SANtricity(RDAC) family
                 *
-                * Maintainer : Sean Stewart
-                * Mail : sean.stewart@netapp.com
+                * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
                 */
                .vendor        = "(NETAPP|LSI|ENGENIO)",
                .product       = "INF-01-00",
@@ -625,69 +768,36 @@ static struct hwentry default_hw[] = {
                /*
                 * SolidFir family
                 *
-                * Maintainer : PJ Waskiewicz
-                * Mail : pj.waskiewicz@netapp.com
+                * 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,
+       },
        /*
         * Nexenta
         *
-        * Maintainer : Yacine Kheddache
-        * Mail : yacine@alyseo.com
+        * Maintainer: Yacine Kheddache <yacine@alyseo.com>
         */
        {
+               /* COMSTAR */
                .vendor        = "NEXENTA",
                .product       = "COMSTAR",
                .pgpolicy      = GROUP_BY_SERIAL,
                .no_path_retry = 30,
        },
-       /*
-        * SGI
-        */
-       {
-               .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,
-       },
-       {
-               /* InfiniteStorage family */
-               .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 */
-               .vendor        = "SGI",
-               .product       = "^DD[46]A-",
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
-               .prio_name     = PRIO_ALUA,
-               .no_path_retry = 30,
-       },
        /*
         * NEC
         */
@@ -706,10 +816,10 @@ static struct hwentry default_hw[] = {
                /*
                 * Pillar Data / Oracle FS
                 *
-                * Maintainer : Srinivasan Ramani
-                * Mail : srinivas.ramani@oracle.com
+                * Maintainer: Srinivasan Ramani <srinivas.ramani@oracle.com>
                 */
        {
+               /* Axiom */
                .vendor        = "^Pillar",
                .product       = "^Axiom",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -717,6 +827,7 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
        },
        {
+               /* FS */
                .vendor        = "^Oracle",
                .product       = "^Oracle FS",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -725,8 +836,22 @@ static struct hwentry default_hw[] = {
        },
                /* Sun - StorageTek */
        {
+               /* B210, B220, B240 and B280 */
+               .vendor        = "STK",
+               .product       = "BladeCtlr",
+               .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,
+       },
+       {
+               /* 9176, D173, D178, D210, D220, D240 and D280 */
                .vendor        = "STK",
-               .product       = "OPENstorage D280",
+               .product       = "OPENstorage",
                .bl_product    = "Universal Xport",
                .pgpolicy      = GROUP_BY_PRIO,
                .checker_name  = RDAC,
@@ -737,6 +862,7 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
+               /* 6540 */
                .vendor        = "STK",
                .product       = "FLEXLINE 380",
                .bl_product    = "Universal Xport",
@@ -749,11 +875,13 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
+               /* (Dot Hill) 3120, 3310, 3320, 3510 and 3511 */
                .vendor        = "SUN",
-               .product       = "(StorEdge 3510|T4)",
+               .product       = "StorEdge 3",
                .pgpolicy      = MULTIBUS,
        },
        {
+               /* 6580 and 6780 */
                .vendor        = "SUN",
                .product       = "STK6580_6780",
                .bl_product    = "Universal Xport",
@@ -792,6 +920,7 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
+               /* 6180 */
                .vendor        = "SUN",
                .product       = "SUN_6180",
                .bl_product    = "Universal Xport",
@@ -803,19 +932,42 @@ static struct hwentry default_hw[] = {
                .pgfailback    = -FAILBACK_IMMEDIATE,
                .no_path_retry = 30,
        },
+       {
+               /* 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,
+               .prio_name     = PRIO_ALUA,
+               .no_path_retry = 30,
+       },
        /*
         * Pivot3
         *
-        * Maintainer : Bart Brooks
-        * Mail : bartb@pivot3.com
+        * Maintainer: Bart Brooks <bartb@pivot3.com>
         */
        {
+               /* 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,
@@ -827,7 +979,8 @@ static struct hwentry default_hw[] = {
         * Intel
         */
        {
-               .vendor        = "(Intel|INTEL)",
+               /* Multi-Flex */
+               .vendor        = "(Intel|INTEL)",
                .product       = "Multi-Flex",
                .bl_product    = "VTrak V-LUN",
                .hwhandler     = "1 alua",
@@ -840,7 +993,8 @@ static struct hwentry default_hw[] = {
         * Linux-IO Target
         */
        {
-               .vendor        = "(LIO-ORG|SUSE)",
+               /* Linux-IO Target */
+               .vendor        = "(LIO-ORG|SUSE)",
                .product       = "RBD",
                .hwhandler     = "1 alua",
                .pgpolicy      = GROUP_BY_PRIO,
@@ -852,7 +1006,8 @@ static struct hwentry default_hw[] = {
         * DataCore
         */
        {
-               .vendor        = "DataCore",
+               /* SANmelody */
+               .vendor        = "DataCore",
                .product       = "SANmelody",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
@@ -860,7 +1015,8 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
        },
        {
-               .vendor        = "DataCore",
+               /* SANsymphony */
+               .vendor        = "DataCore",
                .product       = "Virtual Disk",
                .pgpolicy      = GROUP_BY_PRIO,
                .pgfailback    = -FAILBACK_IMMEDIATE,
@@ -871,76 +1027,65 @@ static struct hwentry default_hw[] = {
         * Pure Storage
         */
        {
+               /* FlashArray */
                .vendor        = "PURE",
                .product       = "FlashArray",
                .pgpolicy      = MULTIBUS,
-               .fast_io_fail  = 10,
-               .dev_loss      = 60,
        },
        /*
         * Huawei
         */
        {
                /* OceanStor V3 */
-               .vendor        = "(HUAWEI|HUASY)",
+               .vendor        = "HUAWEI",
                .product       = "XSG1",
-               .pgpolicy      = MULTIBUS,
-       },
-       /*
-        * Red Hat
-        *
-        * Maintainer: Mike Christie
-        * Mail: mchristi@redhat.com
-        */
-       {
-               .vendor        = "Ceph",
-               .product       = "RBD",
-               .no_path_retry = NO_PATH_RETRY_FAIL,
-               .checker_name  = RBD,
-               .deferred_remove = DEFERRED_REMOVE_ON,
+               .pgpolicy      = GROUP_BY_PRIO,
+               .prio_name     = PRIO_ALUA,
        },
        /*
         * 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    = -FAILBACK_IMMEDIATE,
-               .prio_name     = PRIO_ALUA,
-       },
-       /*
-        * Nimble Storage
-        */
-       {
-               .vendor        = "Nimble",
-               .product       = "Server",
-               .hwhandler     = "1 alua",
-               .pgpolicy      = GROUP_BY_PRIO,
-               .pgfailback    = -FAILBACK_IMMEDIATE,
+               .pgfailback    = 30,
                .prio_name     = PRIO_ALUA,
-               .no_path_retry = NO_PATH_RETRY_QUEUE,
+               .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,
        },
        /*
-        * Tegile Systems
+        * Western Digital (Tegile Systems)
         */
        {
+               /* IntelliFlash */
                .vendor        = "TEGILE",
                .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
                .hwhandler     = "1 alua",
@@ -970,18 +1115,18 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
                .no_path_retry = 15,
        },
-       /*
-        * Xiotech
-        */
        {
-               /* Intelligent Storage Elements family */
-               .vendor        = "(XIOTECH|XIOtech)",
-               .product       = "ISE",
-               .pgpolicy      = MULTIBUS,
-               .no_path_retry = 12,
+               /* 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 Memory
+        * Violin Systems
         */
        {
                /* 3000 / 6000 Series */
@@ -991,6 +1136,7 @@ static struct hwentry default_hw[] = {
                .no_path_retry = 30,
        },
        {
+               /* 3000 / 6000 Series - ALUA mode */
                .vendor        = "VIOLIN",
                .product       = "SAN ARRAY ALUA",
                .hwhandler     = "1 alua",
@@ -1005,15 +1151,52 @@ static struct hwentry default_hw[] = {
                .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,
        },
        /*
         * Promise Technology
         */
        {
+               /* VTrak family */
                .vendor        = "Promise",
                .product       = "VTrak",
                .bl_product    = "VTrak V-LUN",
-               .pgpolicy      = MULTIBUS,
+               .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,
        },
        /*
@@ -1028,61 +1211,66 @@ static struct hwentry default_hw[] = {
                .prio_name     = PRIO_ALUA,
                .no_path_retry = 30,
        },
-#if 0
        /*
-        * 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 : XXX
-        * Mail : XXX
+        * Seagate Technology (Dot Hill Systems)
         */
        {
-               /* If product-ID is different from marketing name add a comment */
-               .vendor        = "VENDOR",
-               .product       = "PRODUCT",
-               .revision      = "REVISION",
-               .bl_product    = "BL_PRODUCT",
-               .pgpolicy      = FAILOVER,
-               .uid_attribute = "ID_SERIAL",
-               .selector      = "service-time 0",
-               .checker_name  = TUR,
-               .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,
-               .deferred_remove = DEFERRED_REMOVE_OFF,
-               .delay_watch_checks = DELAY_CHECKS_OFF,
-               .delay_wait_checks = DELAY_CHECKS_OFF,
+               /* 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,
        },
-#endif
        /*
         * EOL
         */
        {
+               /* NULL */
                .vendor        = NULL,
                .product       = NULL,
        },
 };
 
-extern int
-setup_default_hwtable (vector hw)
+int setup_default_hwtable(vector hw)
 {
        int r = 0;
        struct hwentry * hwe = default_hw;