Imported Upstream version 0.8.6
[platform/upstream/multipath-tools.git] / libmultipath / hwtable.c
1 #include <stdio.h>
2
3 #include "checkers.h"
4 #include "vector.h"
5 #include "defaults.h"
6 #include "structs.h"
7 #include "config.h"
8 #include "pgpolicies.h"
9 #include "prio.h"
10 #include "hwtable.h"
11
12 /*
13  * Tuning suggestions on these parameters should go to
14  * dm-devel@redhat.com (subscribers-only, see README)
15  *
16  * You are welcome to claim maintainership over a controller
17  * family. Please mail the currently enlisted maintainer and
18  * the upstream package maintainer.
19  *
20  * Please, use the TEMPLATE below to add new hardware.
21  *
22  * WARNING:
23  *
24  * Devices with a proprietary handler must also be included in
25  * the kernel side. Currently at drivers/scsi/scsi_dh.c
26  *
27  * Moreover, if a device needs a special treatment by the SCSI
28  * subsystem it should be included in drivers/scsi/scsi_devinfo.c
29  */
30
31 #if 0
32         /*
33          * Copy this TEMPLATE to add new hardware.
34          *
35          * Keep only mandatory(.vendor and .product) and modified attributes.
36          * Attributes with default values must be removed.
37          * .vendor, .product, .revision and .bl_product are POSIX Extended regex.
38          *
39          * COMPANY_NAME
40          *
41          * Maintainer: NAME <email>
42          */
43         {
44                 /* Product Name */
45                 .vendor        = "VENDOR",
46                 .product       = "PRODUCT",
47                 .revision      = "REVISION",
48                 .bl_product    = "BL_PRODUCT",
49                 .pgpolicy      = FAILOVER,
50                 .uid_attribute = "ID_SERIAL",
51                 .selector      = "service-time 0",
52                 .checker_name  = TUR,
53                 .alias_prefix  = "mpath",
54                 .features      = "0",
55                 .hwhandler     = "0",
56                 .prio_name     = PRIO_CONST,
57                 .prio_args     = "",
58                 .pgfailback    = -FAILBACK_MANUAL,
59                 .rr_weight     = RR_WEIGHT_NONE,
60                 .no_path_retry = NO_PATH_RETRY_UNDEF,
61                 .minio         = 1000,
62                 .minio_rq      = 1,
63                 .flush_on_last_del = FLUSH_DISABLED,
64                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
65                 .fast_io_fail  = 5,
66                 .dev_loss      = 600,
67                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
68                 .detect_prio   = DETECT_PRIO_ON,
69                 .detect_checker = DETECT_CHECKER_ON,
70                 .deferred_remove = DEFERRED_REMOVE_OFF,
71                 .delay_watch_checks = DELAY_CHECKS_OFF,
72                 .delay_wait_checks = DELAY_CHECKS_OFF,
73                 .skip_kpartx   = SKIP_KPARTX_OFF,
74                 .max_sectors_kb = MAX_SECTORS_KB_UNDEF,
75                 .ghost_delay   = GHOST_DELAY_OFF,
76         },
77 #endif
78
79 static struct hwentry default_hw[] = {
80         /*
81          * Generic NVMe devices
82          *
83          * Due to the parsing logic in find_hwe(), generic entries
84          * have to be put on top of this list, and more specific ones
85          * below.
86          */
87         {
88                 /* Generic NVMe */
89                 .vendor        = "NVME",
90                 .product       = ".*",
91                 .uid_attribute = DEFAULT_NVME_UID_ATTRIBUTE,
92                 .checker_name  = NONE,
93                 .retain_hwhandler = RETAIN_HWHANDLER_OFF,
94         },
95         /*
96          * Apple
97          *
98          * Maintainer: Shyam Sundar <g.shyamsundar@yahoo.co.in>
99          */
100         {
101                 /* Xserve RAID */
102                 .vendor        = "APPLE",
103                 .product       = "Xserve RAID",
104                 .pgpolicy      = MULTIBUS,
105         },
106         /*
107          * HPE
108          */
109         {
110                 /* 3PAR / Primera */
111                 .vendor        = "3PARdata",
112                 .product       = "VV",
113                 .pgpolicy      = GROUP_BY_PRIO,
114                 .pgfailback    = -FAILBACK_IMMEDIATE,
115                 .hwhandler     = "1 alua",
116                 .prio_name     = PRIO_ALUA,
117                 .no_path_retry = 18,
118                 .fast_io_fail  = 10,
119                 .dev_loss      = MAX_DEV_LOSS_TMO,
120                 .vpd_vendor_id = VPD_VP_HP3PAR,
121         },
122         {
123                 /* RA8000 / ESA12000 */
124                 .vendor        = "DEC",
125                 .product       = "HSG80",
126                 .no_path_retry = NO_PATH_RETRY_QUEUE,
127                 .hwhandler     = "1 hp_sw",
128                 .pgpolicy      = GROUP_BY_PRIO,
129                 .checker_name  = HP_SW,
130                 .prio_name     = PRIO_HP_SW,
131         },
132         {
133                 /* VIRTUAL ARRAY 7400 */
134                 .vendor        = "HP",
135                 .product       = "A6189A",
136                 .pgpolicy      = MULTIBUS,
137                 .no_path_retry = 12,
138         },
139         {
140                 /* MSA 1000/1500 and EVA 3000/5000, with old firmware */
141                 .vendor        = "(COMPAQ|HP)",
142                 .product       = "(MSA|HSV)1[01]0",
143                 .hwhandler     = "1 hp_sw",
144                 .pgpolicy      = GROUP_BY_PRIO,
145                 .no_path_retry = 12,
146                 .checker_name  = HP_SW,
147                 .prio_name     = PRIO_HP_SW,
148         },
149         {
150                 /* MSA 1000/1500 with new firmware */
151                 .vendor        = "(COMPAQ|HP)",
152                 .product       = "MSA VOLUME",
153                 .pgpolicy      = GROUP_BY_PRIO,
154                 .pgfailback    = -FAILBACK_IMMEDIATE,
155                 .no_path_retry = 12,
156                 .prio_name     = PRIO_ALUA,
157         },
158         {
159                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
160                 .vendor        = "(COMPAQ|HP)",
161                 .product       = "(HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0)",
162                 .pgpolicy      = GROUP_BY_PRIO,
163                 .pgfailback    = -FAILBACK_IMMEDIATE,
164                 .no_path_retry = 12,
165                 .prio_name     = PRIO_ALUA,
166         },
167         {
168                 /* MSA2000 family with old firmware */
169                 .vendor        = "HP",
170                 .product       = "(MSA2[02]12fc|MSA2012i)",
171                 .pgpolicy      = MULTIBUS,
172                 .no_path_retry = 18,
173         },
174         {
175                 /* MSA2000 family with new firmware */
176                 .vendor        = "HP",
177                 .product       = "(MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME)",
178                 .pgpolicy      = GROUP_BY_PRIO,
179                 .pgfailback    = -FAILBACK_IMMEDIATE,
180                 .no_path_retry = 18,
181                 .prio_name     = PRIO_ALUA,
182         },
183         {
184                 /* MSA 1040, 1050, 1060, 2040, 2050 and 2060 families */
185                 .vendor        = "HP",
186                 .product       = "MSA [12]0[456]0 SA[NS]",
187                 .pgpolicy      = GROUP_BY_PRIO,
188                 .pgfailback    = -FAILBACK_IMMEDIATE,
189                 .no_path_retry = 18,
190                 .prio_name     = PRIO_ALUA,
191         },
192         {
193                 /* SAN Virtualization Services Platform */
194                 .vendor        = "HP",
195                 .product       = "HSVX700",
196                 .hwhandler     = "1 alua",
197                 .pgpolicy      = GROUP_BY_PRIO,
198                 .pgfailback    = -FAILBACK_IMMEDIATE,
199                 .no_path_retry = 12,
200                 .prio_name     = PRIO_ALUA,
201         },
202         {
203                 /* Smart Array */
204                 .vendor        = "HP",
205                 .product       = "LOGICAL VOLUME",
206                 .pgpolicy      = MULTIBUS,
207                 .no_path_retry = 12,
208         },
209         {
210                 /* P2000 family */
211                 .vendor        = "HP",
212                 .product       = "(P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI)",
213                 .pgpolicy      = GROUP_BY_PRIO,
214                 .pgfailback    = -FAILBACK_IMMEDIATE,
215                 .no_path_retry = 18,
216                 .prio_name     = PRIO_ALUA,
217         },
218         {
219                 /* StoreVirtual 4000 and 3200 families */
220                 .vendor        = "LEFTHAND",
221                 .product       = "(P4000|iSCSIDisk|FCDISK)",
222                 .pgpolicy      = GROUP_BY_PRIO,
223                 .pgfailback    = -FAILBACK_IMMEDIATE,
224                 .no_path_retry = 18,
225                 .prio_name     = PRIO_ALUA,
226         },
227         {
228                 /* Nimble Storage */
229                 .vendor        = "Nimble",
230                 .product       = "Server",
231                 .hwhandler     = "1 alua",
232                 .pgpolicy      = GROUP_BY_PRIO,
233                 .pgfailback    = -FAILBACK_IMMEDIATE,
234                 .prio_name     = PRIO_ALUA,
235                 .no_path_retry = NO_PATH_RETRY_QUEUE,
236         },
237                 /* SGI */
238         {
239                 /* Total Performance 9100 */
240                 .vendor        = "SGI",
241                 .product       = "TP9100",
242                 .pgpolicy      = MULTIBUS,
243         },
244         {
245                 /* Total Performance family */
246                 .vendor        = "SGI",
247                 .product       = "TP9[3457]00",
248                 .bl_product    = "Universal Xport",
249                 .pgpolicy      = GROUP_BY_PRIO,
250                 .checker_name  = RDAC,
251                 .features      = "2 pg_init_retries 50",
252                 .hwhandler     = "1 rdac",
253                 .prio_name     = PRIO_RDAC,
254                 .pgfailback    = -FAILBACK_IMMEDIATE,
255                 .no_path_retry = 30,
256         },
257         {
258                 /* (RDAC) InfiniteStorage */
259                 .vendor        = "SGI",
260                 .product       = "IS",
261                 .bl_product    = "Universal Xport",
262                 .pgpolicy      = GROUP_BY_PRIO,
263                 .checker_name  = RDAC,
264                 .features      = "2 pg_init_retries 50",
265                 .hwhandler     = "1 rdac",
266                 .prio_name     = PRIO_RDAC,
267                 .pgfailback    = -FAILBACK_IMMEDIATE,
268                 .no_path_retry = 30,
269         },
270         {
271                 /* (DDN) InfiniteStorage */
272                 .vendor        = "SGI",
273                 .product       = "^DD[46]A-",
274                 .pgpolicy      = GROUP_BY_PRIO,
275                 .pgfailback    = -FAILBACK_IMMEDIATE,
276                 .prio_name     = PRIO_ALUA,
277                 .no_path_retry = 30,
278         },
279         /*
280          * DataDirect Networks
281          */
282         {
283                 /* SAN DataDirector */
284                 .vendor        = "DDN",
285                 .product       = "SAN DataDirector",
286                 .pgpolicy      = MULTIBUS,
287         },
288         {
289                 /* EF3010 */
290                 .vendor        = "DDN",
291                 .product       = "^EF3010",
292                 .pgpolicy      = MULTIBUS,
293                 .no_path_retry = 30,
294         },
295         {
296                 /* EF3015 / S2A and SFA families */
297                 .vendor        = "DDN",
298                 .product       = "^(EF3015|S2A|SFA)",
299                 .pgpolicy      = GROUP_BY_PRIO,
300                 .pgfailback    = -FAILBACK_IMMEDIATE,
301                 .prio_name     = PRIO_ALUA,
302                 .no_path_retry = 30,
303         },
304         {
305                 /*
306                  * Nexenta COMSTAR
307                  *
308                  * Maintainer: Yacine Kheddache <yacine@alyseo.com>
309                  */
310                 .vendor        = "NEXENTA",
311                 .product       = "COMSTAR",
312                 .pgpolicy      = GROUP_BY_SERIAL,
313                 .no_path_retry = 30,
314         },
315         {
316                 /* Tegile IntelliFlash */
317                 .vendor        = "TEGILE",
318                 .product       = "(ZEBI-(FC|ISCSI)|INTELLIFLASH)",
319                 .hwhandler     = "1 alua",
320                 .pgpolicy      = GROUP_BY_PRIO,
321                 .pgfailback    = -FAILBACK_IMMEDIATE,
322                 .prio_name     = PRIO_ALUA,
323                 .no_path_retry = 10,
324         },
325         /*
326          * Dell EMC
327          */
328         {
329                 /* Symmetrix / DMX / VMAX / PowerMax */
330                 .vendor        = "EMC",
331                 .product       = "SYMMETRIX",
332                 .pgpolicy      = MULTIBUS,
333                 .no_path_retry = 6,
334         },
335         {
336                 /* DGC CLARiiON CX/AX / VNX and Unity */
337                 .vendor        = "^DGC",
338                 .product       = "^(RAID|DISK|VRAID)",
339                 .bl_product    = "LUNZ",
340                 .hwhandler     = "1 emc",
341                 .pgpolicy      = GROUP_BY_PRIO,
342                 .pgfailback    = -FAILBACK_IMMEDIATE,
343                 .no_path_retry = (300 / DEFAULT_CHECKINT),
344                 .checker_name  = EMC_CLARIION,
345                 .prio_name     = PRIO_EMC,
346         },
347         {
348                 /* Invista / VPLEX */
349                 .vendor        = "EMC",
350                 .product       = "Invista",
351                 .bl_product    = "LUNZ",
352                 .pgpolicy      = MULTIBUS,
353                 .no_path_retry = 5,
354         },
355         {
356                 /* XtremIO */
357                 .vendor        = "XtremIO",
358                 .product       = "XtremApp",
359                 .pgpolicy      = MULTIBUS,
360         },
361         {
362                 /*
363                  * SC Series, formerly Compellent
364                  *
365                  * Maintainer: Sean McGinnis <sean_mcginnis@dell.com>
366                  */
367                 .vendor        = "COMPELNT",
368                 .product       = "Compellent Vol",
369                 .pgpolicy      = MULTIBUS,
370                 .no_path_retry = NO_PATH_RETRY_QUEUE,
371         },
372         {
373                 /* MD Series */
374                 .vendor        = "DELL",
375                 .product       = "^MD3",
376                 .bl_product    = "Universal Xport",
377                 .pgpolicy      = GROUP_BY_PRIO,
378                 .checker_name  = RDAC,
379                 .features      = "2 pg_init_retries 50",
380                 .hwhandler     = "1 rdac",
381                 .prio_name     = PRIO_RDAC,
382                 .pgfailback    = -FAILBACK_IMMEDIATE,
383                 .no_path_retry = 30,
384         },
385         {
386                 /* EMC PowerMax NVMe */
387                 .vendor        = "NVME",
388                 .product       = "^EMC PowerMax_",
389                 .pgpolicy      = MULTIBUS,
390         },
391         {
392                 /* PowerStore */
393                 .vendor        = "DellEMC",
394                 .product       = "PowerStore",
395                 .pgpolicy      = GROUP_BY_PRIO,
396                 .prio_name     = PRIO_ALUA,
397                 .hwhandler     = "1 alua",
398                 .pgfailback    = -FAILBACK_IMMEDIATE,
399                 .no_path_retry = 3,
400                 .fast_io_fail  = 15,
401         },
402         /*
403          * Fujitsu
404          */
405         {
406                 /* CentricStor Virtual Tape */
407                 .vendor        = "FSC",
408                 .product       = "CentricStor",
409                 .pgpolicy      = GROUP_BY_SERIAL,
410         },
411         {
412                 /* ETERNUS family */
413                 .vendor        = "FUJITSU",
414                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
415                 .pgpolicy      = GROUP_BY_PRIO,
416                 .pgfailback    = -FAILBACK_IMMEDIATE,
417                 .no_path_retry = 10,
418                 .prio_name     = PRIO_ALUA,
419         },
420         {
421                 /* FibreCAT S80 */
422                 .vendor        = "(EUROLOGC|EuroLogc)",
423                 .product       = "FC2502",
424                 .pgpolicy      = MULTIBUS,
425         },
426         {
427                 /* ETERNUS 2000, 3000 and 4000 */
428                 .vendor        = "FUJITSU",
429                 .product       = "E[234]000",
430                 .pgpolicy      = GROUP_BY_PRIO,
431                 .pgfailback    = -FAILBACK_IMMEDIATE,
432                 .no_path_retry = 10,
433                 .prio_name     = PRIO_ALUA,
434         },
435         {
436                 /* ETERNUS 6000 and 8000 */
437                 .vendor        = "FUJITSU",
438                 .product       = "E[68]000",
439                 .pgpolicy      = MULTIBUS,
440                 .no_path_retry = 10,
441         },
442         {
443                 /*
444                  * ETERNUS AB/HB
445                  * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
446                  */
447                 .vendor        = "FUJITSU",
448                 .product       = "ETERNUS_AHB",
449                 .bl_product    = "Universal Xport",
450                 .pgpolicy      = GROUP_BY_PRIO,
451                 .checker_name  = RDAC,
452                 .features      = "2 pg_init_retries 50",
453                 .hwhandler     = "1 rdac",
454                 .prio_name     = PRIO_RDAC,
455                 .pgfailback    = -FAILBACK_IMMEDIATE,
456                 .no_path_retry = 30,
457         },
458         /*
459          * Hitachi Vantara
460          *
461          * Maintainer: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com>
462          */
463         {
464                 /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */
465                 .vendor        = "(HITACHI|HP)",
466                 .product       = "^OPEN-",
467                 .pgpolicy      = MULTIBUS,
468         },
469         {
470                 /* AMS other than AMS 2000 */
471                 .vendor        = "HITACHI",
472                 .product       = "^DF",
473                 .no_path_retry = NO_PATH_RETRY_QUEUE,
474                 .pgpolicy      = GROUP_BY_PRIO,
475                 .pgfailback    = -FAILBACK_IMMEDIATE,
476                 .prio_name     = PRIO_HDS,
477         },
478         {
479                 /* AMS 2000 and HUS 100 families */
480                 .vendor        = "HITACHI",
481                 .product       = "^DF600F",
482                 .pgpolicy      = MULTIBUS,
483         },
484         /*
485          * IBM
486          *
487          * Maintainer: Hannes Reinecke <hare@suse.de>
488          */
489         {
490                 /* ProFibre 4000R */
491                 .vendor        = "IBM",
492                 .product       = "ProFibre 4000R",
493                 .pgpolicy      = MULTIBUS,
494         },
495         {
496                 /* DS4300 / FAStT600 */
497                 .vendor        = "IBM",
498                 .product       = "^1722-600",
499                 .bl_product    = "Universal Xport",
500                 .pgpolicy      = GROUP_BY_PRIO,
501                 .checker_name  = RDAC,
502                 .features      = "2 pg_init_retries 50",
503                 .hwhandler     = "1 rdac",
504                 .prio_name     = PRIO_RDAC,
505                 .pgfailback    = -FAILBACK_IMMEDIATE,
506                 .no_path_retry = 30,
507         },
508         {
509                 /* DS4100 / FAStT100 */
510                 .vendor        = "IBM",
511                 .product       = "^1724",
512                 .bl_product    = "Universal Xport",
513                 .pgpolicy      = GROUP_BY_PRIO,
514                 .checker_name  = RDAC,
515                 .features      = "2 pg_init_retries 50",
516                 .hwhandler     = "1 rdac",
517                 .prio_name     = PRIO_RDAC,
518                 .pgfailback    = -FAILBACK_IMMEDIATE,
519                 .no_path_retry = 30,
520         },
521         {
522                 /* DS3000 / DS3200 / DS3300 / DS3400 / Boot DS */
523                 .vendor        = "IBM",
524                 .product       = "^1726",
525                 .bl_product    = "Universal Xport",
526                 .pgpolicy      = GROUP_BY_PRIO,
527                 .checker_name  = RDAC,
528                 .features      = "2 pg_init_retries 50",
529                 .hwhandler     = "1 rdac",
530                 .prio_name     = PRIO_RDAC,
531                 .pgfailback    = -FAILBACK_IMMEDIATE,
532                 .no_path_retry = 30,
533         },
534         {
535                 /* DS4400 / DS4500 / FAStT700 / FAStT900 */
536                 .vendor        = "IBM",
537                 .product       = "^1742",
538                 .bl_product    = "Universal Xport",
539                 .pgpolicy      = GROUP_BY_PRIO,
540                 .checker_name  = RDAC,
541                 .features      = "2 pg_init_retries 50",
542                 .hwhandler     = "1 rdac",
543                 .prio_name     = PRIO_RDAC,
544                 .pgfailback    = -FAILBACK_IMMEDIATE,
545                 .no_path_retry = 30,
546         },
547         {
548                 /* DS3500 / DS3512 / DS3524 */
549                 .vendor        = "IBM",
550                 .product       = "^1746",
551                 .bl_product    = "Universal Xport",
552                 .pgpolicy      = GROUP_BY_PRIO,
553                 .checker_name  = RDAC,
554                 .features      = "2 pg_init_retries 50",
555                 .hwhandler     = "1 rdac",
556                 .prio_name     = PRIO_RDAC,
557                 .pgfailback    = -FAILBACK_IMMEDIATE,
558                 .no_path_retry = 30,
559         },
560         {
561                 /* DCS3860 */
562                 .vendor        = "IBM",
563                 .product       = "^1813",
564                 .bl_product    = "Universal Xport",
565                 .pgpolicy      = GROUP_BY_PRIO,
566                 .checker_name  = RDAC,
567                 .features      = "2 pg_init_retries 50",
568                 .hwhandler     = "1 rdac",
569                 .prio_name     = PRIO_RDAC,
570                 .pgfailback    = -FAILBACK_IMMEDIATE,
571                 .no_path_retry = 30,
572         },
573         {
574                 /* DS3950 / DS4200 / DS4700 / DS5020 */
575                 .vendor        = "IBM",
576                 .product       = "^1814",
577                 .bl_product    = "Universal Xport",
578                 .pgpolicy      = GROUP_BY_PRIO,
579                 .checker_name  = RDAC,
580                 .features      = "2 pg_init_retries 50",
581                 .hwhandler     = "1 rdac",
582                 .prio_name     = PRIO_RDAC,
583                 .pgfailback    = -FAILBACK_IMMEDIATE,
584                 .no_path_retry = 30,
585         },
586         {
587                 /* DS4800 */
588                 .vendor        = "IBM",
589                 .product       = "^1815",
590                 .bl_product    = "Universal Xport",
591                 .pgpolicy      = GROUP_BY_PRIO,
592                 .checker_name  = RDAC,
593                 .features      = "2 pg_init_retries 50",
594                 .hwhandler     = "1 rdac",
595                 .prio_name     = PRIO_RDAC,
596                 .pgfailback    = -FAILBACK_IMMEDIATE,
597                 .no_path_retry = 30,
598         },
599         {
600                 /* DS5000 / DS5100 / DS5300 / DCS3700 */
601                 .vendor        = "IBM",
602                 .product       = "^1818",
603                 .bl_product    = "Universal Xport",
604                 .pgpolicy      = GROUP_BY_PRIO,
605                 .checker_name  = RDAC,
606                 .features      = "2 pg_init_retries 50",
607                 .hwhandler     = "1 rdac",
608                 .prio_name     = PRIO_RDAC,
609                 .pgfailback    = -FAILBACK_IMMEDIATE,
610                 .no_path_retry = 30,
611         },
612         {
613                 /* Netfinity Fibre Channel RAID Controller Unit */
614                 .vendor        = "IBM",
615                 .product       = "^3526",
616                 .bl_product    = "Universal Xport",
617                 .pgpolicy      = GROUP_BY_PRIO,
618                 .checker_name  = RDAC,
619                 .features      = "2 pg_init_retries 50",
620                 .hwhandler     = "1 rdac",
621                 .prio_name     = PRIO_RDAC,
622                 .pgfailback    = -FAILBACK_IMMEDIATE,
623                 .no_path_retry = 30,
624         },
625         {
626                 /* FAStT200 and FAStT500 */
627                 .vendor        = "IBM",
628                 .product       = "^(3542|3552)",
629                 .bl_product    = "Universal Xport",
630                 .pgpolicy      = GROUP_BY_PRIO,
631                 .checker_name  = RDAC,
632                 .features      = "2 pg_init_retries 50",
633                 .hwhandler     = "1 rdac",
634                 .prio_name     = PRIO_RDAC,
635                 .pgfailback    = -FAILBACK_IMMEDIATE,
636                 .no_path_retry = 30,
637         },
638         {
639                 /* Enterprise Storage Server(ESS) / Shark family */
640                 .vendor        = "IBM",
641                 .product       = "^2105",
642                 .no_path_retry = NO_PATH_RETRY_QUEUE,
643                 .pgpolicy      = MULTIBUS,
644         },
645         {
646                 /* DS6000 / DS6800 */
647                 .vendor        = "IBM",
648                 .product       = "^1750500",
649                 .no_path_retry = NO_PATH_RETRY_QUEUE,
650                 .pgpolicy      = GROUP_BY_PRIO,
651                 .pgfailback    = -FAILBACK_IMMEDIATE,
652                 .prio_name     = PRIO_ALUA,
653         },
654         {
655                 /* DS8000 family */
656                 .vendor        = "IBM",
657                 .product       = "^2107900",
658                 .no_path_retry = NO_PATH_RETRY_QUEUE,
659                 .pgpolicy      = MULTIBUS,
660         },
661         {
662                 /* Storwize family / SAN Volume Controller / Flex System V7000 / FlashSystem V840/V9000/9100 */
663                 .vendor        = "IBM",
664                 .product       = "^2145",
665                 .no_path_retry = NO_PATH_RETRY_QUEUE,
666                 .pgpolicy      = GROUP_BY_PRIO,
667                 .pgfailback    = -FAILBACK_IMMEDIATE,
668                 .prio_name     = PRIO_ALUA,
669         },
670         {
671                 /* PAV DASD ECKD */
672                 .vendor        = "IBM",
673                 .product       = "S/390 DASD ECKD",
674                 .bl_product    = "S/390",
675                 .uid_attribute = "ID_UID",
676                 .no_path_retry = NO_PATH_RETRY_QUEUE,
677                 .pgpolicy      = MULTIBUS,
678                 .checker_name  = DIRECTIO,
679         },
680         {
681                 /* PAV DASD FBA */
682                 .vendor        = "IBM",
683                 .product       = "S/390 DASD FBA",
684                 .bl_product    = "S/390",
685                 .uid_attribute = "ID_UID",
686                 .no_path_retry = NO_PATH_RETRY_QUEUE,
687                 .pgpolicy      = MULTIBUS,
688                 .checker_name  = DIRECTIO,
689         },
690         {
691                 /* Power RAID */
692                 .vendor        = "IBM",
693                 .product       = "^IPR",
694                 .no_path_retry = NO_PATH_RETRY_QUEUE,
695                 .hwhandler     = "1 alua",
696                 .pgpolicy      = GROUP_BY_PRIO,
697                 .pgfailback    = -FAILBACK_IMMEDIATE,
698                 .prio_name     = PRIO_ALUA,
699         },
700         {
701                 /* SAS RAID Controller Module (RSSM) */
702                 .vendor        = "IBM",
703                 .product       = "1820N00",
704                 .pgpolicy      = GROUP_BY_PRIO,
705                 .pgfailback    = -FAILBACK_IMMEDIATE,
706                 .no_path_retry = NO_PATH_RETRY_QUEUE,
707                 .prio_name     = PRIO_ALUA,
708         },
709         {
710                 /* XIV Storage System / FlashSystem A9000/A9000R */
711                 .vendor        = "(XIV|IBM)",
712                 .product       = "(NEXTRA|2810XIV)",
713                 .no_path_retry = NO_PATH_RETRY_QUEUE,
714                 .pgpolicy      = MULTIBUS,
715         },
716         {
717                 /* TMS RamSan / FlashSystem 710/720/810/820/840/900 */
718                 .vendor        = "(TMS|IBM)",
719                 .product       = "(RamSan|FlashSystem)",
720                 .pgpolicy      = MULTIBUS,
721         },
722         {
723                 /* (DDN) DCS9900, SONAS 2851-DR1 */
724                 .vendor        = "IBM",
725                 .product       = "^(DCS9900|2851)",
726                 .pgpolicy      = GROUP_BY_PRIO,
727                 .pgfailback    = -FAILBACK_IMMEDIATE,
728                 .prio_name     = PRIO_ALUA,
729                 .no_path_retry = 30,
730         },
731                 /*
732                  * IBM Power Virtual SCSI Devices
733                  *
734                  * Maintainer: Brian King <brking@linux.vnet.ibm.com>
735                  */
736         {
737                 /* AIX VDASD */
738                 .vendor        = "AIX",
739                 .product       = "VDASD",
740                 .pgpolicy      = MULTIBUS,
741                 .no_path_retry = (300 / DEFAULT_CHECKINT),
742         },
743         {
744                 /* 3303 NVDISK */
745                 .vendor        = "IBM",
746                 .product       = "3303[ ]+NVDISK",
747                 .no_path_retry = (300 / DEFAULT_CHECKINT),
748         },
749         {
750                 /* AIX NVDISK */
751                 .vendor        = "AIX",
752                 .product       = "NVDISK",
753                 .hwhandler     = "1 alua",
754                 .pgpolicy      = GROUP_BY_PRIO,
755                 .pgfailback    = -FAILBACK_IMMEDIATE,
756                 .no_path_retry = (300 / DEFAULT_CHECKINT),
757                 .prio_name     = PRIO_ALUA,
758         },
759         /*
760          * Lenovo
761          */
762         {
763                 /*
764                  * DE Series
765                  *
766                  * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
767                  */
768                 .vendor        = "LENOVO",
769                 .product       = "DE_Series",
770                 .bl_product    = "Universal Xport",
771                 .pgpolicy      = GROUP_BY_PRIO,
772                 .checker_name  = RDAC,
773                 .features      = "2 pg_init_retries 50",
774                 .hwhandler     = "1 rdac",
775                 .prio_name     = PRIO_RDAC,
776                 .pgfailback    = -FAILBACK_IMMEDIATE,
777                 .no_path_retry = 30,
778         },
779         /*
780          * NetApp
781          */
782         {
783                 /*
784                  * ONTAP family
785                  *
786                  * Maintainer: Martin George <marting@netapp.com>
787                  */
788                 .vendor        = "NETAPP",
789                 .product       = "LUN",
790                 .features      = "2 pg_init_retries 50",
791                 .no_path_retry = NO_PATH_RETRY_QUEUE,
792                 .pgpolicy      = GROUP_BY_PRIO,
793                 .pgfailback    = -FAILBACK_IMMEDIATE,
794                 .flush_on_last_del = FLUSH_ENABLED,
795                 .dev_loss      = MAX_DEV_LOSS_TMO,
796                 .prio_name     = PRIO_ONTAP,
797                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
798         },
799         {
800                 /*
801                  * SANtricity(RDAC) family
802                  *
803                  * Maintainer: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
804                  */
805                 .vendor        = "(NETAPP|LSI|ENGENIO)",
806                 .product       = "INF-01-00",
807                 .bl_product    = "Universal Xport",
808                 .pgpolicy      = GROUP_BY_PRIO,
809                 .checker_name  = RDAC,
810                 .features      = "2 pg_init_retries 50",
811                 .hwhandler     = "1 rdac",
812                 .prio_name     = PRIO_RDAC,
813                 .pgfailback    = -FAILBACK_IMMEDIATE,
814                 .no_path_retry = 30,
815         },
816         {
817                 /*
818                  * SolidFir family
819                  *
820                  * Maintainer: PJ Waskiewicz <pj.waskiewicz@netapp.com>
821                  */
822                 .vendor        = "SolidFir",
823                 .product       = "SSD SAN",
824                 .pgpolicy      = MULTIBUS,
825                 .no_path_retry = 24,
826         },
827         {
828                 /*
829                  * NVMe-FC namespace devices: MULTIBUS, queueing preferred
830                  *
831                  * The hwtable is searched backwards, so place this after "Generic NVMe"
832                  */
833                 .vendor        = "NVME",
834                 .product       = "^NetApp ONTAP Controller",
835                 .pgpolicy      = MULTIBUS,
836                 .no_path_retry = NO_PATH_RETRY_QUEUE,
837         },
838         /*
839          * NEC
840          */
841         {
842                 /* M-Series */
843                 .vendor        = "NEC",
844                 .product       = "DISK ARRAY",
845                 .hwhandler     = "1 alua",
846                 .pgpolicy      = GROUP_BY_PRIO,
847                 .pgfailback    = -FAILBACK_IMMEDIATE,
848                 .prio_name     = PRIO_ALUA,
849         },
850         /*
851          * Oracle
852          */
853                 /*
854                  * Pillar Data / Oracle FS
855                  *
856                  * Maintainer: Srinivasan Ramani <srinivas.ramani@oracle.com>
857                  */
858         {
859                 /* Axiom */
860                 .vendor        = "^Pillar",
861                 .product       = "^Axiom",
862                 .pgpolicy      = GROUP_BY_PRIO,
863                 .pgfailback    = -FAILBACK_IMMEDIATE,
864                 .prio_name     = PRIO_ALUA,
865         },
866         {
867                 /* FS */
868                 .vendor        = "^Oracle",
869                 .product       = "^Oracle FS",
870                 .pgpolicy      = GROUP_BY_PRIO,
871                 .pgfailback    = -FAILBACK_IMMEDIATE,
872                 .prio_name     = PRIO_ALUA,
873         },
874                 /* Sun - StorageTek */
875         {
876                 /* B210, B220, B240 and B280 */
877                 .vendor        = "STK",
878                 .product       = "BladeCtlr",
879                 .bl_product    = "Universal Xport",
880                 .pgpolicy      = GROUP_BY_PRIO,
881                 .checker_name  = RDAC,
882                 .features      = "2 pg_init_retries 50",
883                 .hwhandler     = "1 rdac",
884                 .prio_name     = PRIO_RDAC,
885                 .pgfailback    = -FAILBACK_IMMEDIATE,
886                 .no_path_retry = 30,
887         },
888         {
889                 /* 9176, D173, D178, D210, D220, D240 and D280 */
890                 .vendor        = "STK",
891                 .product       = "OPENstorage",
892                 .bl_product    = "Universal Xport",
893                 .pgpolicy      = GROUP_BY_PRIO,
894                 .checker_name  = RDAC,
895                 .features      = "2 pg_init_retries 50",
896                 .hwhandler     = "1 rdac",
897                 .prio_name     = PRIO_RDAC,
898                 .pgfailback    = -FAILBACK_IMMEDIATE,
899                 .no_path_retry = 30,
900         },
901         {
902                 /* 6540 */
903                 .vendor        = "STK",
904                 .product       = "FLEXLINE 380",
905                 .bl_product    = "Universal Xport",
906                 .pgpolicy      = GROUP_BY_PRIO,
907                 .checker_name  = RDAC,
908                 .features      = "2 pg_init_retries 50",
909                 .hwhandler     = "1 rdac",
910                 .prio_name     = PRIO_RDAC,
911                 .pgfailback    = -FAILBACK_IMMEDIATE,
912                 .no_path_retry = 30,
913         },
914         {
915                 /* (Dot Hill) 3120, 3310, 3320, 3510 and 3511 */
916                 .vendor        = "SUN",
917                 .product       = "StorEdge 3",
918                 .pgpolicy      = MULTIBUS,
919         },
920         {
921                 /* 6580 and 6780 */
922                 .vendor        = "SUN",
923                 .product       = "STK6580_6780",
924                 .bl_product    = "Universal Xport",
925                 .pgpolicy      = GROUP_BY_PRIO,
926                 .checker_name  = RDAC,
927                 .features      = "2 pg_init_retries 50",
928                 .hwhandler     = "1 rdac",
929                 .prio_name     = PRIO_RDAC,
930                 .pgfailback    = -FAILBACK_IMMEDIATE,
931                 .no_path_retry = 30,
932         },
933         {
934                 /* 6130 / 6140 */
935                 .vendor        = "SUN",
936                 .product       = "CSM[12]00_R",
937                 .bl_product    = "Universal Xport",
938                 .pgpolicy      = GROUP_BY_PRIO,
939                 .checker_name  = RDAC,
940                 .features      = "2 pg_init_retries 50",
941                 .hwhandler     = "1 rdac",
942                 .prio_name     = PRIO_RDAC,
943                 .pgfailback    = -FAILBACK_IMMEDIATE,
944                 .no_path_retry = 30,
945         },
946         {
947                 /* 2500 / 2510 / 2530 / 2540 */
948                 .vendor        = "SUN",
949                 .product       = "LCSM100_[IEFS]",
950                 .bl_product    = "Universal Xport",
951                 .pgpolicy      = GROUP_BY_PRIO,
952                 .checker_name  = RDAC,
953                 .features      = "2 pg_init_retries 50",
954                 .hwhandler     = "1 rdac",
955                 .prio_name     = PRIO_RDAC,
956                 .pgfailback    = -FAILBACK_IMMEDIATE,
957                 .no_path_retry = 30,
958         },
959         {
960                 /* 6180 */
961                 .vendor        = "SUN",
962                 .product       = "SUN_6180",
963                 .bl_product    = "Universal Xport",
964                 .pgpolicy      = GROUP_BY_PRIO,
965                 .checker_name  = RDAC,
966                 .features      = "2 pg_init_retries 50",
967                 .hwhandler     = "1 rdac",
968                 .prio_name     = PRIO_RDAC,
969                 .pgfailback    = -FAILBACK_IMMEDIATE,
970                 .no_path_retry = 30,
971         },
972         {
973                 /* ArrayStorage */
974                 .vendor        = "SUN",
975                 .product       = "ArrayStorage",
976                 .bl_product    = "Universal Xport",
977                 .pgpolicy      = GROUP_BY_PRIO,
978                 .checker_name  = RDAC,
979                 .features      = "2 pg_init_retries 50",
980                 .hwhandler     = "1 rdac",
981                 .prio_name     = PRIO_RDAC,
982                 .pgfailback    = -FAILBACK_IMMEDIATE,
983                 .no_path_retry = 30,
984         },
985         {
986                 /* ZFS Storage Appliances */
987                 .vendor        = "SUN",
988                 .product       = "(Sun Storage|ZFS Storage|COMSTAR)",
989                 .pgpolicy      = GROUP_BY_PRIO,
990                 .pgfailback    = -FAILBACK_IMMEDIATE,
991                 .prio_name     = PRIO_ALUA,
992                 .no_path_retry = 30,
993         },
994         /*
995          * Pivot3
996          *
997          * Maintainer: Bart Brooks <bartb@pivot3.com>
998          */
999         {
1000                 /* Raige */
1001                 .vendor        = "PIVOT3",
1002                 .product       = "RAIGE VOLUME",
1003                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1004                 .pgpolicy      = MULTIBUS,
1005         },
1006         {
1007                 /* NexGen / vSTAC */
1008                 .vendor        = "(NexGen|Pivot3)",
1009                 .product       = "(TierStore|vSTAC)",
1010                 .pgpolicy      = GROUP_BY_PRIO,
1011                 .pgfailback    = -FAILBACK_IMMEDIATE,
1012                 .prio_name     = PRIO_ALUA,
1013                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1014         },
1015         /*
1016          * Intel
1017          */
1018         {
1019                 /* Multi-Flex */
1020                 .vendor        = "(Intel|INTEL)",
1021                 .product       = "Multi-Flex",
1022                 .bl_product    = "VTrak V-LUN",
1023                 .hwhandler     = "1 alua",
1024                 .pgpolicy      = GROUP_BY_PRIO,
1025                 .pgfailback    = -FAILBACK_IMMEDIATE,
1026                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1027                 .prio_name     = PRIO_ALUA,
1028         },
1029         /*
1030          * Linux-IO Target
1031          */
1032         {
1033                 /* Linux-IO Target */
1034                 .vendor        = "(LIO-ORG|SUSE)",
1035                 .product       = "RBD",
1036                 .hwhandler     = "1 alua",
1037                 .pgpolicy      = GROUP_BY_PRIO,
1038                 .pgfailback    = -FAILBACK_IMMEDIATE,
1039                 .no_path_retry = 12,
1040                 .prio_name     = PRIO_ALUA,
1041         },
1042         /*
1043          * DataCore
1044          */
1045         {
1046                 /* SANmelody */
1047                 .vendor        = "DataCore",
1048                 .product       = "SANmelody",
1049                 .pgpolicy      = GROUP_BY_PRIO,
1050                 .pgfailback    = -FAILBACK_IMMEDIATE,
1051                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1052                 .prio_name     = PRIO_ALUA,
1053         },
1054         {
1055                 /* SANsymphony */
1056                 .vendor        = "DataCore",
1057                 .product       = "Virtual Disk",
1058                 .pgpolicy      = GROUP_BY_PRIO,
1059                 .pgfailback    = -FAILBACK_IMMEDIATE,
1060                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1061                 .prio_name     = PRIO_ALUA,
1062         },
1063         /*
1064          * Pure Storage
1065          */
1066         {
1067                 /* FlashArray */
1068                 .vendor        = "PURE",
1069                 .product       = "FlashArray",
1070                 .pgpolicy      = GROUP_BY_PRIO,
1071                 .pgfailback    = -FAILBACK_IMMEDIATE,
1072                 .hwhandler     = "1 alua",
1073                 .prio_name     = PRIO_ALUA,
1074                 .fast_io_fail  = 10,
1075                 .max_sectors_kb = 4096,
1076         },
1077         /*
1078          * Huawei
1079          */
1080         {
1081                 /* OceanStor V3 */
1082                 .vendor        = "HUAWEI",
1083                 .product       = "XSG1",
1084                 .pgpolicy      = GROUP_BY_PRIO,
1085                 .prio_name     = PRIO_ALUA,
1086         },
1087         /*
1088          * Kove
1089          */
1090         {
1091                 /* XPD */
1092                 .vendor        = "KOVE",
1093                 .product       = "XPD",
1094                 .pgpolicy      = MULTIBUS,
1095         },
1096         /*
1097          * Infinidat
1098          *
1099          * Maintainer: Arnon Yaari <arnony@infinidat.com>
1100          */
1101         {
1102                 /* InfiniBox */
1103                 .vendor        = "NFINIDAT",
1104                 .product       = "InfiniBox",
1105                 .pgpolicy      = GROUP_BY_PRIO,
1106                 .pgfailback    = 30,
1107                 .prio_name     = PRIO_ALUA,
1108                 .selector      = "round-robin 0",
1109                 .rr_weight     = RR_WEIGHT_PRIO,
1110                 .no_path_retry = NO_PATH_RETRY_FAIL,
1111                 .minio         = 1,
1112                 .minio_rq      = 1,
1113                 .flush_on_last_del = FLUSH_ENABLED,
1114                 .fast_io_fail  = 15,
1115                 .dev_loss      = 15,
1116         },
1117         /*
1118          * Kaminario
1119          */
1120         {
1121                 /* K2 */
1122                 .vendor        = "KMNRIO",
1123                 .product       = "K2",
1124                 .pgpolicy      = MULTIBUS,
1125         },
1126         /*
1127          * StorCentric
1128          */
1129                 /* Nexsan */
1130         {
1131                 /* E-Series */
1132                 .vendor        = "NEXSAN",
1133                 .product       = "NXS-B0",
1134                 .pgpolicy      = GROUP_BY_PRIO,
1135                 .pgfailback    = -FAILBACK_IMMEDIATE,
1136                 .prio_name     = PRIO_ALUA,
1137                 .no_path_retry = 15,
1138         },
1139         {
1140                 /* SATABeast / SATABoy */
1141                 .vendor        = "NEXSAN",
1142                 .product       = "SATAB",
1143                 .pgpolicy      = GROUP_BY_PRIO,
1144                 .pgfailback    = -FAILBACK_IMMEDIATE,
1145                 .prio_name     = PRIO_ALUA,
1146                 .no_path_retry = 15,
1147         },
1148         {
1149                 /* NST / UNITY */
1150                 .vendor        = "Nexsan",
1151                 .product       = "(NestOS|NST5000)",
1152                 .hwhandler     = "1 alua",
1153                 .pgpolicy      = GROUP_BY_PRIO,
1154                 .pgfailback    = -FAILBACK_IMMEDIATE,
1155                 .prio_name     = PRIO_ALUA,
1156                 .no_path_retry = 30,
1157         },
1158                 /* Violin Systems */
1159         {
1160                 /* 3000 / 6000 Series */
1161                 .vendor        = "VIOLIN",
1162                 .product       = "SAN ARRAY$",
1163                 .pgpolicy      = GROUP_BY_SERIAL,
1164                 .no_path_retry = 30,
1165         },
1166         {
1167                 /* 3000 / 6000 Series - ALUA mode */
1168                 .vendor        = "VIOLIN",
1169                 .product       = "SAN ARRAY ALUA",
1170                 .hwhandler     = "1 alua",
1171                 .pgpolicy      = GROUP_BY_PRIO,
1172                 .pgfailback    = -FAILBACK_IMMEDIATE,
1173                 .prio_name     = PRIO_ALUA,
1174                 .no_path_retry = 30,
1175         },
1176         {
1177                 /* FSP 7000 family */
1178                 .vendor        = "VIOLIN",
1179                 .product       = "CONCERTO ARRAY",
1180                 .pgpolicy      = MULTIBUS,
1181                 .no_path_retry = 30,
1182         },
1183                 /* Xiotech */
1184         {
1185                 /* Intelligent Storage Elements family */
1186                 .vendor        = "(XIOTECH|XIOtech)",
1187                 .product       = "ISE",
1188                 .pgpolicy      = MULTIBUS,
1189                 .no_path_retry = 12,
1190         },
1191         {
1192                 /* iglu blaze family */
1193                 .vendor        = "(XIOTECH|XIOtech)",
1194                 .product       = "IGLU DISK",
1195                 .pgpolicy      = MULTIBUS,
1196                 .no_path_retry = 30,
1197         },
1198         {
1199                 /* Magnitude family */
1200                 .vendor        = "(XIOTECH|XIOtech)",
1201                 .product       = "Magnitude",
1202                 .pgpolicy      = MULTIBUS,
1203                 .no_path_retry = 30,
1204         },
1205                 /* Vexata */
1206         {
1207                 /* VX */
1208                 .vendor        = "Vexata",
1209                 .product       = "VX",
1210                 .pgpolicy      = MULTIBUS,
1211                 .no_path_retry = 30,
1212         },
1213         /*
1214          * Promise Technology
1215          */
1216         {
1217                 /* VTrak family */
1218                 .vendor        = "Promise",
1219                 .product       = "VTrak",
1220                 .bl_product    = "VTrak V-LUN",
1221                 .hwhandler     = "1 alua",
1222                 .pgpolicy      = GROUP_BY_PRIO,
1223                 .pgfailback    = -FAILBACK_IMMEDIATE,
1224                 .prio_name     = PRIO_ALUA,
1225                 .no_path_retry = 30,
1226         },
1227         {
1228                 /* Vess family */
1229                 .vendor        = "Promise",
1230                 .product       = "Vess",
1231                 .bl_product    = "Vess V-LUN",
1232                 .hwhandler     = "1 alua",
1233                 .pgpolicy      = GROUP_BY_PRIO,
1234                 .pgfailback    = -FAILBACK_IMMEDIATE,
1235                 .prio_name     = PRIO_ALUA,
1236                 .no_path_retry = 30,
1237         },
1238         /*
1239          * Infortrend Technology
1240          */
1241         {
1242                 /* EonStor / ESVA */
1243                 .vendor        = "^IFT",
1244                 .product       = ".*",
1245                 .pgpolicy      = GROUP_BY_PRIO,
1246                 .pgfailback    = -FAILBACK_IMMEDIATE,
1247                 .prio_name     = PRIO_ALUA,
1248                 .no_path_retry = 30,
1249         },
1250         /*
1251          * Seagate Technology (Dot Hill Systems)
1252          */
1253         {
1254                 /* SANnet family */
1255                 .vendor        = "DotHill",
1256                 .product       = "SANnet",
1257                 .pgpolicy      = MULTIBUS,
1258                 .no_path_retry = 30,
1259         },
1260         {
1261                 /* R/Evolution family */
1262                 .vendor        = "DotHill",
1263                 .product       = "R/Evo",
1264                 .pgpolicy      = GROUP_BY_PRIO,
1265                 .pgfailback    = -FAILBACK_IMMEDIATE,
1266                 .prio_name     = PRIO_ALUA,
1267                 .no_path_retry = 30,
1268         },
1269         {
1270                 /* AssuredSAN family */
1271                 .vendor        = "DotHill",
1272                 .product       = "^DH",
1273                 .pgpolicy      = GROUP_BY_PRIO,
1274                 .pgfailback    = -FAILBACK_IMMEDIATE,
1275                 .prio_name     = PRIO_ALUA,
1276                 .no_path_retry = 30,
1277         },
1278         /*
1279          * AccelStor
1280          */
1281         {
1282                 /* NeoSapphire */
1283                 .vendor        = "AStor",
1284                 .product       = "NeoSapphire",
1285                 .pgpolicy      = MULTIBUS,
1286                 .no_path_retry = 30,
1287         },
1288         /*
1289          * INSPUR
1290          */
1291         {
1292                 /* AS5300/AS5500 G2 */
1293                 .vendor        = "INSPUR",
1294                 .product       = "MCS",
1295                 .pgpolicy      = GROUP_BY_PRIO,
1296                 .pgfailback    = -FAILBACK_IMMEDIATE,
1297                 .prio_name     = PRIO_ALUA,
1298         },
1299         /*
1300          * MacroSAN Technologies
1301          */
1302         {
1303                 /* MS family */
1304                 .vendor        = "MacroSAN",
1305                 .product       = "LU",
1306                 .pgpolicy      = GROUP_BY_PRIO,
1307                 .pgfailback    = -FAILBACK_IMMEDIATE,
1308                 .prio_name     = PRIO_ALUA,
1309                 .no_path_retry = 30,
1310         },
1311         /*
1312          * EOL
1313          */
1314         {
1315                 /* NULL */
1316                 .vendor        = NULL,
1317                 .product       = NULL,
1318         },
1319 };
1320
1321 int setup_default_hwtable(vector hw)
1322 {
1323         int r = 0;
1324         struct hwentry * hwe = default_hw;
1325
1326         while (hwe->vendor) {
1327                 r += store_hwe(hw, hwe);
1328                 hwe++;
1329         }
1330         return r;
1331 }