Imported Upstream version 0.6.1
[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
11 /*
12  * Tuning suggestions on these parameters should go to
13  * dm-devel@redhat.com
14  * 
15  * You are welcome to claim maintainership over a controller
16  * family. Please mail the currently enlisted maintainer and
17  * the upstream package maintainer.
18  */
19 static struct hwentry default_hw[] = {
20         /*
21          * Compellent Technologies, Inc.
22          *
23          * Maintainer : Jim Lester, Compellent
24          * Mail : jim.lester@compellent.com
25          */
26         {
27                 .vendor        = "COMPELNT",
28                 .product       = "Compellent Vol",
29                 .features      = DEFAULT_FEATURES,
30                 .hwhandler     = DEFAULT_HWHANDLER,
31                 .pgpolicy      = MULTIBUS,
32                 .pgfailback    = -FAILBACK_IMMEDIATE,
33                 .rr_weight     = RR_WEIGHT_NONE,
34                 .no_path_retry = NO_PATH_RETRY_QUEUE,
35                 .checker_name  = TUR,
36                 .prio_name     = DEFAULT_PRIO,
37                 .prio_args     = NULL,
38         },
39         /*
40          * Apple controller family
41          *
42          * Maintainer : Shyam Sundar
43          * Mail : g.shyamsundar@yahoo.co.in
44          */
45         {
46                 .vendor        = "APPLE*",
47                 .product       = "Xserve RAID ",
48                 .features      = DEFAULT_FEATURES,
49                 .hwhandler     = DEFAULT_HWHANDLER,
50                 .pgpolicy      = MULTIBUS,
51                 .pgfailback    = FAILBACK_UNDEF,
52                 .rr_weight     = RR_WEIGHT_NONE,
53                 .no_path_retry = NO_PATH_RETRY_UNDEF,
54                 .checker_name  = DEFAULT_CHECKER,
55                 .prio_name     = DEFAULT_PRIO,
56                 .prio_args     = NULL,
57         },
58         /*
59          * StorageWorks controller family
60          *
61          * Maintainer : Christophe Varoqui
62          * Mail : christophe.varoqui@opensvc.com
63          */
64         {
65                 .vendor        = "3PARdata",
66                 .product       = "VV",
67                 .features      = DEFAULT_FEATURES,
68                 .hwhandler     = DEFAULT_HWHANDLER,
69                 .pgpolicy      = MULTIBUS,
70                 .pgfailback    = FAILBACK_UNDEF,
71                 .rr_weight     = RR_WEIGHT_NONE,
72                 .no_path_retry = NO_PATH_RETRY_UNDEF,
73                 .checker_name  = DEFAULT_CHECKER,
74                 .prio_name     = DEFAULT_PRIO,
75                 .prio_args     = NULL,
76         },
77         {
78                 .vendor        = "DEC",
79                 .product       = "HSG80",
80                 .features      = "1 queue_if_no_path",
81                 .hwhandler     = "1 hp_sw",
82                 .pgpolicy      = GROUP_BY_PRIO,
83                 .pgfailback    = FAILBACK_UNDEF,
84                 .rr_weight     = RR_WEIGHT_NONE,
85                 .no_path_retry = NO_PATH_RETRY_UNDEF,
86                 .checker_name  = HP_SW,
87                 .prio_name     = PRIO_HP_SW,
88                 .prio_args     = NULL,
89         },
90         {
91                 .vendor        = "HP",
92                 .product       = "A6189A",
93                 .features      = DEFAULT_FEATURES,
94                 .hwhandler     = DEFAULT_HWHANDLER,
95                 .pgpolicy      = MULTIBUS,
96                 .pgfailback    = FAILBACK_UNDEF,
97                 .rr_weight     = RR_WEIGHT_NONE,
98                 .no_path_retry = 12,
99                 .checker_name  = DIRECTIO,
100                 .prio_name     = DEFAULT_PRIO,
101                 .prio_args     = NULL,
102         },
103         {
104                 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
105                 .vendor        = "(COMPAQ|HP)",
106                 .product       = "(MSA|HSV)1.0.*",
107                 .features      = "1 queue_if_no_path",
108                 .hwhandler     = "1 hp_sw",
109                 .pgpolicy      = GROUP_BY_PRIO,
110                 .pgfailback    = FAILBACK_UNDEF,
111                 .rr_weight     = RR_WEIGHT_NONE,
112                 .no_path_retry = 12,
113                 .minio         = 100,
114                 .checker_name  = HP_SW,
115                 .prio_name     = PRIO_HP_SW,
116                 .prio_args     = NULL,
117         },
118         {
119                 /* MSA 1000/1500 with new firmware */
120                 .vendor        = "(COMPAQ|HP)",
121                 .product       = "MSA VOLUME",
122                 .features      = DEFAULT_FEATURES,
123                 .hwhandler     = DEFAULT_HWHANDLER,
124                 .pgpolicy      = GROUP_BY_PRIO,
125                 .pgfailback    = -FAILBACK_IMMEDIATE,
126                 .rr_weight     = RR_WEIGHT_NONE,
127                 .no_path_retry = 12,
128                 .minio         = 100,
129                 .checker_name  = TUR,
130                 .prio_name     = PRIO_ALUA,
131                 .prio_args     = NULL,
132         },
133         {
134                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
135                 .vendor        = "(COMPAQ|HP)",
136                 .product       = "HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0",
137                 .features      = DEFAULT_FEATURES,
138                 .hwhandler     = DEFAULT_HWHANDLER,
139                 .pgpolicy      = GROUP_BY_PRIO,
140                 .pgfailback    = -FAILBACK_IMMEDIATE,
141                 .rr_weight     = RR_WEIGHT_NONE,
142                 .no_path_retry = 12,
143                 .minio         = 100,
144                 .checker_name  = TUR,
145                 .prio_name     = PRIO_ALUA,
146                 .prio_args     = NULL,
147         },
148         {
149                 /* HP MSA2000 product family with old firmware */
150                 .vendor        = "HP",
151                 .product       = "MSA2[02]12fc|MSA2012i",
152                 .features      = DEFAULT_FEATURES,
153                 .hwhandler     = DEFAULT_HWHANDLER,
154                 .pgpolicy      = MULTIBUS,
155                 .pgfailback    = -FAILBACK_IMMEDIATE,
156                 .rr_weight     = RR_WEIGHT_NONE,
157                 .no_path_retry = 18,
158                 .minio         = 100,
159                 .checker_name  = TUR,
160                 .prio_name     = DEFAULT_PRIO,
161                 .prio_args     = NULL,
162         },
163         {
164                 /* HP MSA2000 product family with new firmware */
165                 .vendor        = "HP",
166                 .product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
167                 .features      = DEFAULT_FEATURES,
168                 .hwhandler     = DEFAULT_HWHANDLER,
169                 .pgpolicy      = GROUP_BY_PRIO,
170                 .pgfailback    = -FAILBACK_IMMEDIATE,
171                 .rr_weight     = RR_WEIGHT_NONE,
172                 .no_path_retry = 18,
173                 .minio         = 100,
174                 .checker_name  = TUR,
175                 .prio_name     = PRIO_ALUA,
176                 .prio_args     = NULL,
177         },
178         {
179                 /* HP MSA 1040/2040 product family */
180                 .vendor        = "HP",
181                 .product       = "MSA (1|2)040 SA(N|S)",
182                 .features      = DEFAULT_FEATURES,
183                 .hwhandler     = DEFAULT_HWHANDLER,
184                 .pgpolicy      = GROUP_BY_PRIO,
185                 .pgfailback    = -FAILBACK_IMMEDIATE,
186                 .rr_weight     = RR_WEIGHT_NONE,
187                 .no_path_retry = 18,
188                 .minio         = 100,
189                 .checker_name  = TUR,
190                 .prio_name     = PRIO_ALUA,
191                 .prio_args     = NULL,
192         },
193
194         {
195                 /* HP SVSP */
196                 .vendor        = "HP",
197                 .product       = "HSVX700",
198                 .features      = DEFAULT_FEATURES,
199                 .hwhandler     = "1 alua",
200                 .pgpolicy      = GROUP_BY_PRIO,
201                 .pgfailback    = -FAILBACK_IMMEDIATE,
202                 .rr_weight     = RR_WEIGHT_NONE,
203                 .no_path_retry = 12,
204                 .minio         = 100,
205                 .checker_name  = TUR,
206                 .prio_name     = PRIO_ALUA,
207                 .prio_args     = NULL,
208         },
209
210         {
211                 /* HP Smart Array */
212                 .vendor        = "HP",
213                 .product       = "LOGICAL VOLUME.*",
214                 .features      = DEFAULT_FEATURES,
215                 .hwhandler     = DEFAULT_HWHANDLER,
216                 .pgpolicy      = MULTIBUS,
217                 .pgfailback    = FAILBACK_UNDEF,
218                 .rr_weight     = RR_WEIGHT_NONE,
219                 .no_path_retry = 12,
220                 .checker_name  = TUR,
221                 .prio_name     = DEFAULT_PRIO,
222                 .prio_args     = NULL,
223         },
224         {
225                 /* HP P2000 family arrays */
226                 .vendor        = "HP",
227                 .product       = "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI",
228                 .features      = DEFAULT_FEATURES,
229                 .hwhandler     = DEFAULT_HWHANDLER,
230                 .pgpolicy      = GROUP_BY_PRIO,
231                 .pgfailback    = -FAILBACK_IMMEDIATE,
232                 .rr_weight     = RR_WEIGHT_NONE,
233                 .no_path_retry = 18,
234                 .minio         = 100,
235                 .checker_name  = TUR,
236                 .prio_name     = PRIO_ALUA,
237                 .prio_args     = NULL,
238         },
239         /*
240          * DDN controller family
241          *
242          * Maintainer : Christophe Varoqui
243          * Mail : christophe.varoqui@opensvc.com
244          */
245         {
246                 .vendor        = "DDN",
247                 .product       = "SAN DataDirector",
248                 .features      = DEFAULT_FEATURES,
249                 .hwhandler     = DEFAULT_HWHANDLER,
250                 .pgpolicy      = MULTIBUS,
251                 .pgfailback    = FAILBACK_UNDEF,
252                 .rr_weight     = RR_WEIGHT_NONE,
253                 .no_path_retry = NO_PATH_RETRY_UNDEF,
254                 .checker_name  = DIRECTIO,
255                 .prio_name     = DEFAULT_PRIO,
256                 .prio_args     = NULL,
257         },
258         /*
259          * EMC / Clariion controller family
260          *
261          * Maintainer : Edward Goggin, EMC
262          * Mail : egoggin@emc.com
263          */
264         {
265                 .vendor        = "EMC",
266                 .product       = "SYMMETRIX",
267                 .features      = DEFAULT_FEATURES,
268                 .hwhandler     = DEFAULT_HWHANDLER,
269                 .pgpolicy      = MULTIBUS,
270                 .pgfailback    = FAILBACK_UNDEF,
271                 .rr_weight     = RR_WEIGHT_NONE,
272                 .no_path_retry = 6,
273                 .checker_name  = TUR,
274                 .prio_name     = DEFAULT_PRIO,
275                 .prio_args     = NULL,
276         },
277         {
278                 .vendor        = "DGC",
279                 .product       = ".*",
280                 .bl_product    = "LUNZ",
281                 .features      = "1 queue_if_no_path",
282                 .hwhandler     = "1 emc",
283                 .pgpolicy      = GROUP_BY_PRIO,
284                 .pgfailback    = -FAILBACK_IMMEDIATE,
285                 .rr_weight     = RR_WEIGHT_NONE,
286                 .no_path_retry = (300 / DEFAULT_CHECKINT),
287                 .checker_name  = EMC_CLARIION,
288                 .prio_name     = PRIO_EMC,
289                 .prio_args     = NULL,
290                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
291                 .detect_prio   = DETECT_PRIO_ON,
292         },
293         {
294                 .vendor        = "EMC",
295                 .product       = "Invista",
296                 .bl_product    = "LUNZ",
297                 .features      = DEFAULT_FEATURES,
298                 .hwhandler     = DEFAULT_HWHANDLER,
299                 .pgpolicy      = MULTIBUS,
300                 .pgfailback    = FAILBACK_UNDEF,
301                 .rr_weight     = RR_WEIGHT_NONE,
302                 .no_path_retry = 5,
303                 .checker_name  = TUR,
304                 .prio_name     = DEFAULT_PRIO,
305                 .prio_args     = NULL,
306         },
307         {
308                 .vendor        = "XtremIO",
309                 .product       = "XtremApp",
310                 .features      = DEFAULT_FEATURES,
311                 .hwhandler     = DEFAULT_HWHANDLER,
312                 .selector      = "queue-length 0",
313                 .pgpolicy      = MULTIBUS,
314                 .pgfailback    = FAILBACK_UNDEF,
315                 .checker_name  = TUR,
316                 .fast_io_fail  = 5,
317                 .prio_name     = DEFAULT_PRIO,
318                 .prio_args     = NULL,
319         },
320         /*
321          * Fujitsu controller family
322          *
323          * Maintainer : Christophe Varoqui
324          * Mail : christophe.varoqui@opensvc.com
325          */
326         {
327                 .vendor        = "FSC",
328                 .product       = "CentricStor",
329                 .features      = DEFAULT_FEATURES,
330                 .hwhandler     = DEFAULT_HWHANDLER,
331                 .pgpolicy      = GROUP_BY_SERIAL,
332                 .pgfailback    = FAILBACK_UNDEF,
333                 .rr_weight     = RR_WEIGHT_NONE,
334                 .no_path_retry = NO_PATH_RETRY_UNDEF,
335                 .checker_name  = DIRECTIO,
336                 .prio_name     = DEFAULT_PRIO,
337                 .prio_args     = NULL,
338         },
339         {
340                 .vendor        = "FUJITSU",
341                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
342                 .features      = "1 queue_if_no_path",
343                 .hwhandler     = DEFAULT_HWHANDLER,
344                 .pgpolicy      = GROUP_BY_PRIO,
345                 .pgfailback    = -FAILBACK_IMMEDIATE,
346                 .rr_weight     = RR_WEIGHT_NONE,
347                 .no_path_retry = 10,
348                 .checker_name  = TUR,
349                 .prio_name     = PRIO_ALUA,
350                 .prio_args     = NULL,
351         },
352         /*
353          * Hitachi controller family
354          *
355          * Maintainer : Matthias Rudolph
356          * Mail : matthias.rudolph@hds.com
357          */
358         {
359                 .vendor        = "(HITACHI|HP)",
360                 .product       = "OPEN-.*",
361                 .features      = DEFAULT_FEATURES,
362                 .hwhandler     = DEFAULT_HWHANDLER,
363                 .pgpolicy      = MULTIBUS,
364                 .pgfailback    = FAILBACK_UNDEF,
365                 .rr_weight     = RR_WEIGHT_NONE,
366                 .no_path_retry = NO_PATH_RETRY_UNDEF,
367                 .checker_name  = TUR,
368                 .prio_name     = DEFAULT_PRIO,
369                 .prio_args     = NULL,
370         },
371         {
372                 .vendor        = "HITACHI",
373                 .product       = "DF.*",
374                 .features      = "1 queue_if_no_path",
375                 .hwhandler     = DEFAULT_HWHANDLER,
376                 .pgpolicy      = GROUP_BY_PRIO,
377                 .pgfailback    = -FAILBACK_IMMEDIATE,
378                 .rr_weight     = RR_WEIGHT_NONE,
379                 .no_path_retry = NO_PATH_RETRY_UNDEF,
380                 .checker_name  = TUR,
381                 .prio_name     = PRIO_HDS,
382                 .prio_args     = NULL,
383         },
384         /*
385          * IBM controller family
386          *
387          * Maintainer : Hannes Reinecke, SuSE
388          * Mail : hare@suse.de
389          */
390         {
391                 .vendor        = "IBM",
392                 .product       = "ProFibre 4000R",
393                 .features      = DEFAULT_FEATURES,
394                 .hwhandler     = DEFAULT_HWHANDLER,
395                 .pgpolicy      = MULTIBUS,
396                 .pgfailback    = FAILBACK_UNDEF,
397                 .rr_weight     = RR_WEIGHT_NONE,
398                 .no_path_retry = NO_PATH_RETRY_UNDEF,
399                 .checker_name  = DIRECTIO,
400                 .prio_name     = DEFAULT_PRIO,
401                 .prio_args     = NULL,
402         },
403         {
404                 /* IBM FAStT 1722-600 */
405                 .vendor        = "IBM",
406                 .product       = "^1722-600",
407                 .bl_product    = "Universal Xport",
408                 .features      = "1 queue_if_no_path",
409                 .hwhandler     = "1 rdac",
410                 .pgpolicy      = GROUP_BY_PRIO,
411                 .pgfailback    = -FAILBACK_IMMEDIATE,
412                 .rr_weight     = RR_WEIGHT_NONE,
413                 .no_path_retry = 300,
414                 .checker_name  = RDAC,
415                 .prio_name     = PRIO_RDAC,
416                 .prio_args     = NULL,
417         },
418         {
419                 /* IBM DS4100 */
420                 .vendor        = "IBM",
421                 .product       = "^1724",
422                 .bl_product    = "Universal Xport",
423                 .features      = "1 queue_if_no_path",
424                 .hwhandler     = "1 rdac",
425                 .pgpolicy      = GROUP_BY_PRIO,
426                 .pgfailback    = -FAILBACK_IMMEDIATE,
427                 .rr_weight     = RR_WEIGHT_NONE,
428                 .no_path_retry = 300,
429                 .checker_name  = RDAC,
430                 .prio_name     = PRIO_RDAC,
431                 .prio_args     = NULL,
432         },
433         {
434                 /* IBM DS3200 / DS3300 / DS3400 */
435                 .vendor        = "IBM",
436                 .product       = "^1726",
437                 .bl_product    = "Universal Xport",
438                 .features      = "1 queue_if_no_path",
439                 .hwhandler     = "1 rdac",
440                 .pgpolicy      = GROUP_BY_PRIO,
441                 .pgfailback    = -FAILBACK_IMMEDIATE,
442                 .rr_weight     = RR_WEIGHT_NONE,
443                 .no_path_retry = 300,
444                 .checker_name  = RDAC,
445                 .prio_name     = PRIO_RDAC,
446                 .prio_args     = NULL,
447         },
448         {
449                 /* IBM DS4400 / DS4500 / FAStT700 */
450                 .vendor        = "IBM",
451                 .product       = "^1742",
452                 .bl_product    = "Universal Xport",
453                 .features      = DEFAULT_FEATURES,
454                 .hwhandler     = "1 rdac",
455                 .pgpolicy      = GROUP_BY_PRIO,
456                 .pgfailback    = -FAILBACK_IMMEDIATE,
457                 .rr_weight     = RR_WEIGHT_NONE,
458                 .no_path_retry = NO_PATH_RETRY_QUEUE,
459                 .checker_name  = RDAC,
460                 .prio_name     = PRIO_RDAC,
461                 .prio_args     = NULL,
462         },
463         {
464                 .vendor        = "IBM",
465                 .product       = "^1745|^1746",
466                 .bl_product    = "Universal Xport",
467                 .features      = "2 pg_init_retries 50",
468                 .hwhandler     = "1 rdac",
469                 .pgpolicy      = GROUP_BY_PRIO,
470                 .pgfailback    = -FAILBACK_IMMEDIATE,
471                 .rr_weight     = RR_WEIGHT_NONE,
472                 .no_path_retry = 15,
473                 .checker_name  = RDAC,
474                 .prio_name     = PRIO_RDAC,
475                 .prio_args     = NULL,
476         },
477         {
478             /* IBM DS4700 */
479                 .vendor        = "IBM",
480                 .product       = "^1814",
481                 .bl_product    = "Universal Xport",
482                 .features      = DEFAULT_FEATURES,
483                 .hwhandler     = "1 rdac",
484                 .pgpolicy      = GROUP_BY_PRIO,
485                 .pgfailback    = -FAILBACK_IMMEDIATE,
486                 .rr_weight     = RR_WEIGHT_NONE,
487                 .no_path_retry = NO_PATH_RETRY_QUEUE,
488                 .checker_name  = RDAC,
489                 .prio_name     = PRIO_RDAC,
490                 .prio_args     = NULL,
491         },
492         {
493             /* IBM DS4800 */
494                 .vendor        = "IBM",
495                 .product       = "^1815",
496                 .bl_product    = "Universal Xport",
497                 .features      = DEFAULT_FEATURES,
498                 .hwhandler     = "1 rdac",
499                 .pgpolicy      = GROUP_BY_PRIO,
500                 .pgfailback    = -FAILBACK_IMMEDIATE,
501                 .rr_weight     = RR_WEIGHT_NONE,
502                 .no_path_retry = NO_PATH_RETRY_QUEUE,
503                 .checker_name  = RDAC,
504                 .prio_name     = PRIO_RDAC,
505                 .prio_args     = NULL,
506         },
507         {
508             /* IBM DS5000 */
509                 .vendor        = "IBM",
510                 .product       = "^1818",
511                 .bl_product    = "Universal Xport",
512                 .features      = DEFAULT_FEATURES,
513                 .hwhandler     = "1 rdac",
514                 .pgpolicy      = GROUP_BY_PRIO,
515                 .pgfailback    = -FAILBACK_IMMEDIATE,
516                 .rr_weight     = RR_WEIGHT_NONE,
517                 .no_path_retry = NO_PATH_RETRY_QUEUE,
518                 .checker_name  = RDAC,
519                 .prio_name     = PRIO_RDAC,
520                 .prio_args     = NULL,
521         },
522         {
523                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
524                 .vendor        = "IBM",
525                 .product       = "^3526",
526                 .bl_product    = "Universal Xport",
527                 .features      = DEFAULT_FEATURES,
528                 .hwhandler     = "1 rdac",
529                 .pgpolicy      = GROUP_BY_PRIO,
530                 .pgfailback    = -FAILBACK_IMMEDIATE,
531                 .rr_weight     = RR_WEIGHT_NONE,
532                 .no_path_retry = NO_PATH_RETRY_QUEUE,
533                 .checker_name  = RDAC,
534                 .prio_name     = PRIO_RDAC,
535                 .prio_args     = NULL,
536         },
537         {
538                 /* IBM DS4200 / FAStT200 */
539                 .vendor        = "IBM",
540                 .product       = "^3542",
541                 .features      = DEFAULT_FEATURES,
542                 .hwhandler     = DEFAULT_HWHANDLER,
543                 .pgpolicy      = GROUP_BY_SERIAL,
544                 .pgfailback    = FAILBACK_UNDEF,
545                 .rr_weight     = RR_WEIGHT_NONE,
546                 .no_path_retry = NO_PATH_RETRY_UNDEF,
547                 .checker_name  = TUR,
548                 .prio_name     = DEFAULT_PRIO,
549                 .prio_args     = NULL,
550         },
551         {
552                 /* IBM ESS F20 aka Shark */
553                 .vendor        = "IBM",
554                 .product       = "^2105800",
555                 .features      = "1 queue_if_no_path",
556                 .hwhandler     = DEFAULT_HWHANDLER,
557                 .pgpolicy      = GROUP_BY_SERIAL,
558                 .pgfailback    = FAILBACK_UNDEF,
559                 .rr_weight     = RR_WEIGHT_NONE,
560                 .no_path_retry = NO_PATH_RETRY_UNDEF,
561                 .checker_name  = TUR,
562                 .prio_name     = DEFAULT_PRIO,
563                 .prio_args     = NULL,
564         },
565         {
566                 /* IBM ESS F20 aka Shark */
567                 .vendor        = "IBM",
568                 .product       = "^2105F20",
569                 .features      = "1 queue_if_no_path",
570                 .hwhandler     = DEFAULT_HWHANDLER,
571                 .pgpolicy      = GROUP_BY_SERIAL,
572                 .pgfailback    = FAILBACK_UNDEF,
573                 .rr_weight     = RR_WEIGHT_NONE,
574                 .no_path_retry = NO_PATH_RETRY_UNDEF,
575                 .checker_name  = TUR,
576                 .prio_name     = DEFAULT_PRIO,
577                 .prio_args     = NULL,
578         },
579         {
580                 /* IBM DS6000 */
581                 .vendor        = "IBM",
582                 .product       = "^1750500",
583                 .features      = "1 queue_if_no_path",
584                 .hwhandler     = DEFAULT_HWHANDLER,
585                 .pgpolicy      = GROUP_BY_PRIO,
586                 .pgfailback    = -FAILBACK_IMMEDIATE,
587                 .rr_weight     = RR_WEIGHT_NONE,
588                 .no_path_retry = NO_PATH_RETRY_UNDEF,
589                 .checker_name  = TUR,
590                 .prio_name     = PRIO_ALUA,
591                 .prio_args     = NULL,
592         },
593         {
594                 /* IBM DS8000 */
595                 .vendor        = "IBM",
596                 .product       = "^2107900",
597                 .features      = "1 queue_if_no_path",
598                 .hwhandler     = DEFAULT_HWHANDLER,
599                 .pgpolicy      = MULTIBUS,
600                 .pgfailback    = FAILBACK_UNDEF,
601                 .rr_weight     = RR_WEIGHT_NONE,
602                 .no_path_retry = NO_PATH_RETRY_UNDEF,
603                 .checker_name  = TUR,
604                 .prio_name     = DEFAULT_PRIO,
605                 .prio_args     = NULL,
606         },
607         {
608                 /* IBM SAN Volume Controller */
609                 .vendor        = "IBM",
610                 .product       = "^2145",
611                 .features      = "1 queue_if_no_path",
612                 .hwhandler     = DEFAULT_HWHANDLER,
613                 .pgpolicy      = GROUP_BY_PRIO,
614                 .pgfailback    = -FAILBACK_IMMEDIATE,
615                 .rr_weight     = RR_WEIGHT_NONE,
616                 .no_path_retry = NO_PATH_RETRY_UNDEF,
617                 .checker_name  = TUR,
618                 .prio_name     = PRIO_ALUA,
619                 .prio_args     = NULL,
620         },
621         {
622                 /* IBM S/390 ECKD DASD */
623                 .vendor        = "IBM",
624                 .product       = "S/390 DASD ECKD",
625                 .bl_product       = "S/390.*",
626                 .uid_attribute = "ID_UID",
627                 .features      = "1 queue_if_no_path",
628                 .hwhandler     = DEFAULT_HWHANDLER,
629                 .pgpolicy      = MULTIBUS,
630                 .pgfailback    = FAILBACK_UNDEF,
631                 .rr_weight     = RR_WEIGHT_NONE,
632                 .no_path_retry = NO_PATH_RETRY_UNDEF,
633                 .checker_name  = DIRECTIO,
634                 .prio_name     = DEFAULT_PRIO,
635                 .prio_args     = NULL,
636         },
637         {
638                 /* IBM S/390 FBA DASD */
639                 .vendor        = "IBM",
640                 .product       = "S/390 DASD FBA",
641                 .bl_product       = "S/390.*",
642                 .uid_attribute = "ID_UID",
643                 .features      = "1 queue_if_no_path",
644                 .hwhandler     = DEFAULT_HWHANDLER,
645                 .pgpolicy      = MULTIBUS,
646                 .pgfailback    = FAILBACK_UNDEF,
647                 .rr_weight     = RR_WEIGHT_NONE,
648                 .no_path_retry = NO_PATH_RETRY_UNDEF,
649                 .checker_name  = DIRECTIO,
650                 .prio_name     = DEFAULT_PRIO,
651                 .prio_args     = NULL,
652         },
653         {
654                 /* IBM IPR */
655                 .vendor        = "IBM",
656                 .product       = "^IPR.*",
657                 .features      = "1 queue_if_no_path",
658                 .hwhandler     = "1 alua",
659                 .pgpolicy      = GROUP_BY_PRIO,
660                 .pgfailback    = -FAILBACK_IMMEDIATE,
661                 .rr_weight     = RR_WEIGHT_NONE,
662                 .no_path_retry = NO_PATH_RETRY_UNDEF,
663                 .checker_name  = TUR,
664                 .prio_name     = PRIO_ALUA,
665                 .prio_args     = NULL,
666         },
667         {
668                 /* IBM RSSM */
669                 .vendor        = "IBM",
670                 .product       = "1820N00",
671                 .features      = DEFAULT_FEATURES,
672                 .hwhandler     = DEFAULT_HWHANDLER,
673                 .pgpolicy      = GROUP_BY_PRIO,
674                 .pgfailback    = -FAILBACK_IMMEDIATE,
675                 .rr_weight     = RR_WEIGHT_NONE,
676                 .no_path_retry = NO_PATH_RETRY_QUEUE,
677                 .minio         = 100,
678                 .checker_name  = TUR,
679                 .prio_name     = PRIO_ALUA,
680                 .prio_args     = NULL,
681         },
682         {
683             /* IBM XIV Storage System */
684                 .vendor        = "IBM",
685                 .product       = "2810XIV",
686                 .features      = "1 queue_if_no_path",
687                 .hwhandler     = DEFAULT_HWHANDLER,
688                 .pgpolicy      = MULTIBUS,
689                 .pgfailback    = 15,
690                 .rr_weight     = RR_WEIGHT_NONE,
691                 .no_path_retry = NO_PATH_RETRY_UNDEF,
692                 .minio         = 15,
693                 .checker_name  = TUR,
694                 .prio_name     = DEFAULT_PRIO,
695                 .prio_args     = NULL,
696         },
697         /*
698          * IBM Power Virtual SCSI Devices
699          *
700          * Maintainer : Brian King, IBM
701          * Mail : brking@linux.vnet.ibm.com
702          */
703         {
704                 /* AIX VDASD */
705                 .vendor        = "AIX",
706                 .product       = "VDASD",
707                 .features      = DEFAULT_FEATURES,
708                 .hwhandler     = DEFAULT_HWHANDLER,
709                 .pgpolicy      = MULTIBUS,
710                 .pgfailback    = -FAILBACK_IMMEDIATE,
711                 .rr_weight     = RR_WEIGHT_NONE,
712                 .no_path_retry = (300 / DEFAULT_CHECKINT),
713                 .checker_name  = DIRECTIO,
714                 .prio_name     = DEFAULT_PRIO,
715                 .prio_args     = NULL,
716         },
717         {
718                 /* IBM 3303      NVDISK */
719                 .vendor        = "IBM",
720                 .product       = "3303      NVDISK",
721                 .features      = DEFAULT_FEATURES,
722                 .hwhandler     = DEFAULT_HWHANDLER,
723                 .pgpolicy      = FAILOVER,
724                 .pgfailback    = -FAILBACK_IMMEDIATE,
725                 .rr_weight     = RR_WEIGHT_NONE,
726                 .no_path_retry = (300 / DEFAULT_CHECKINT),
727                 .checker_name  = TUR,
728                 .prio_name     = DEFAULT_PRIO,
729                 .prio_args     = NULL,
730         },
731         {
732                 /* AIX NVDISK */
733                 .vendor        = "AIX",
734                 .product       = "NVDISK",
735                 .features      = DEFAULT_FEATURES,
736                 .hwhandler     = "1 alua",
737                 .pgpolicy      = GROUP_BY_PRIO,
738                 .pgfailback    = -FAILBACK_IMMEDIATE,
739                 .rr_weight     = RR_WEIGHT_NONE,
740                 .no_path_retry = (300 / DEFAULT_CHECKINT),
741                 .checker_name  = TUR,
742                 .prio_name     = PRIO_ALUA,
743                 .prio_args     = NULL,
744         },
745         {
746                 /* DELL MD3000 */
747                 .vendor        = "DELL",
748                 .product       = "MD3000",
749                 .bl_product    = "Universal Xport",
750                 .features      = "2 pg_init_retries 50",
751                 .hwhandler     = "1 rdac",
752                 .pgpolicy      = GROUP_BY_PRIO,
753                 .pgfailback    = -FAILBACK_IMMEDIATE,
754                 .rr_weight     = RR_WEIGHT_NONE,
755                 .no_path_retry = 15,
756                 .checker_name  = RDAC,
757                 .prio_name     = PRIO_RDAC,
758                 .prio_args     = NULL,
759         },
760         {
761                 /* DELL MD3000i */
762                 .vendor        = "DELL",
763                 .product       = "MD3000i",
764                 .bl_product    = "Universal Xport",
765                 .features      = "2 pg_init_retries 50",
766                 .hwhandler     = "1 rdac",
767                 .pgpolicy      = GROUP_BY_PRIO,
768                 .pgfailback    = -FAILBACK_IMMEDIATE,
769                 .rr_weight     = RR_WEIGHT_NONE,
770                 .no_path_retry = 15,
771                 .checker_name  = RDAC,
772                 .prio_name     = PRIO_RDAC,
773                 .prio_args     = NULL,
774         },
775         {
776                 /* DELL MD32xx */
777                 .vendor        = "DELL",
778                 .product       = "MD32xx",
779                 .bl_product    = "Universal Xport",
780                 .features      = "2 pg_init_retries 50",
781                 .hwhandler     = "1 rdac",
782                 .pgpolicy      = GROUP_BY_PRIO,
783                 .pgfailback    = -FAILBACK_IMMEDIATE,
784                 .rr_weight     = RR_WEIGHT_NONE,
785                 .no_path_retry = 15,
786                 .checker_name  = RDAC,
787                 .prio_name     = PRIO_RDAC,
788                 .prio_args     = NULL,
789         },
790         {
791                 /* DELL MD32xxi */
792                 .vendor        = "DELL",
793                 .product       = "MD32xxi",
794                 .bl_product    = "Universal Xport",
795                 .features      = "2 pg_init_retries 50",
796                 .hwhandler     = "1 rdac",
797                 .pgpolicy      = GROUP_BY_PRIO,
798                 .pgfailback    = -FAILBACK_IMMEDIATE,
799                 .rr_weight     = RR_WEIGHT_NONE,
800                 .no_path_retry = 15,
801                 .checker_name  = RDAC,
802                 .prio_name     = PRIO_RDAC,
803                 .prio_args     = NULL,
804         },
805         {
806                 /* DELL MD36xxi */
807                 .vendor        = "DELL",
808                 .product       = "MD36xxi",
809                 .bl_product    = "Universal Xport",
810                 .features      = "2 pg_init_retries 50",
811                 .hwhandler     = "1 rdac",
812                 .pgpolicy      = GROUP_BY_PRIO,
813                 .pgfailback    = -FAILBACK_IMMEDIATE,
814                 .rr_weight     = RR_WEIGHT_NONE,
815                 .no_path_retry = 15,
816                 .checker_name  = RDAC,
817                 .prio_name     = PRIO_RDAC,
818                 .prio_args     = NULL,
819         },
820         {
821                 /* DELL MD36xxf */
822                 .vendor        = "DELL",
823                 .product       = "MD36xxf",
824                 .bl_product    = "Universal Xport",
825                 .features      = "2 pg_init_retries 50",
826                 .hwhandler     = "1 rdac",
827                 .pgpolicy      = GROUP_BY_PRIO,
828                 .pgfailback    = -FAILBACK_IMMEDIATE,
829                 .rr_weight     = RR_WEIGHT_NONE,
830                 .no_path_retry = 15,
831                 .checker_name  = RDAC,
832                 .prio_name     = PRIO_RDAC,
833                 .prio_args     = NULL,
834         },
835         /*
836          * NETAPP controller family
837          *
838          * Maintainer : Dave Wysochanski
839          * Mail : davidw@netapp.com
840          */
841         {
842                 .vendor        = "NETAPP",
843                 .product       = "LUN.*",
844                 .features      = "3 queue_if_no_path pg_init_retries 50",
845                 .hwhandler     = DEFAULT_HWHANDLER,
846                 .pgpolicy      = GROUP_BY_PRIO,
847                 .pgfailback    = -FAILBACK_IMMEDIATE,
848                 .flush_on_last_del = FLUSH_ENABLED,
849                 .rr_weight     = RR_WEIGHT_NONE,
850                 .no_path_retry = NO_PATH_RETRY_UNDEF,
851                 .minio         = 128,
852                 .dev_loss      = MAX_DEV_LOSS_TMO,
853                 .checker_name  = TUR,
854                 .prio_name     = PRIO_ONTAP,
855                 .prio_args     = NULL,
856                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
857                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
858                 .detect_prio   = DETECT_PRIO_ON,
859         },
860         /*
861          * NEXENTA/COMSTAR controller family
862          *
863          * Maintainer : Yacine Kheddache
864          * Mail : yacine@alyseo.com
865          */
866         {
867                 .vendor        = "NEXENTA",
868                 .product       = "COMSTAR",
869                 .features      = "1 queue_if_no_path",
870                 .hwhandler     = DEFAULT_HWHANDLER,
871                 .pgpolicy      = GROUP_BY_SERIAL,
872                 .pgfailback    = -FAILBACK_IMMEDIATE,
873                 .rr_weight     = RR_WEIGHT_NONE,
874                 .no_path_retry = 30,
875                 .minio         = 128,
876                 .checker_name  = DIRECTIO,
877                 .prio_name     = DEFAULT_PRIO,
878                 .prio_args     = NULL,
879         },
880         /*
881          * IBM NSeries (NETAPP) controller family
882          *
883          * Maintainer : Dave Wysochanski
884          * Mail : davidw@netapp.com
885          */
886         {
887                 .vendor        = "IBM",
888                 .product       = "Nseries.*",
889                 .features      = "1 queue_if_no_path",
890                 .hwhandler     = DEFAULT_HWHANDLER,
891                 .pgpolicy      = GROUP_BY_PRIO,
892                 .pgfailback    = -FAILBACK_IMMEDIATE,
893                 .rr_weight     = RR_WEIGHT_NONE,
894                 .no_path_retry = NO_PATH_RETRY_UNDEF,
895                 .minio         = 128,
896                 .checker_name  = DIRECTIO,
897                 .prio_name     = PRIO_ONTAP,
898                 .prio_args     = NULL,
899         },
900         /*
901          * Pillar Data controller family
902          *
903          * Maintainer : Srinivasan Ramani
904          * Mail : sramani@pillardata.com
905          */
906         {
907                 .vendor        = "Pillar",
908                 .product       = "Axiom.*",
909                 .features      = DEFAULT_FEATURES,
910                 .hwhandler     = DEFAULT_HWHANDLER,
911                 .pgpolicy      = GROUP_BY_PRIO,
912                 .pgfailback    = FAILBACK_UNDEF,
913                 .rr_weight     = RR_WEIGHT_NONE,
914                 .no_path_retry = NO_PATH_RETRY_UNDEF,
915                 .checker_name  = TUR,
916                 .prio_name     = PRIO_ALUA,
917                 .prio_args     = NULL,
918         },
919
920         /*
921          * SGI arrays
922          *
923          * Maintainer : Christophe Varoqui
924          * Mail : christophe.varoqui@opensvc.com
925          */
926         {
927                 .vendor        = "SGI",
928                 .product       = "TP9[13]00",
929                 .features      = DEFAULT_FEATURES,
930                 .hwhandler     = DEFAULT_HWHANDLER,
931                 .pgpolicy      = MULTIBUS,
932                 .pgfailback    = FAILBACK_UNDEF,
933                 .rr_weight     = RR_WEIGHT_NONE,
934                 .no_path_retry = NO_PATH_RETRY_UNDEF,
935                 .checker_name  = DIRECTIO,
936                 .prio_name     = DEFAULT_PRIO,
937                 .prio_args     = NULL,
938         },
939         {
940                 .vendor        = "SGI",
941                 .product       = "TP9[45]00",
942                 .bl_product    = "Universal Xport",
943                 .features      = DEFAULT_FEATURES,
944                 .hwhandler     = "1 rdac",
945                 .pgpolicy      = GROUP_BY_PRIO,
946                 .pgfailback    = -FAILBACK_IMMEDIATE,
947                 .rr_weight     = RR_WEIGHT_NONE,
948                 .no_path_retry = NO_PATH_RETRY_QUEUE,
949                 .checker_name  = RDAC,
950                 .prio_name     = PRIO_RDAC,
951                 .prio_args     = NULL,
952         },
953         {
954                 .vendor        = "SGI",
955                 .product       = "IS.*",
956                 .bl_product    = "Universal Xport",
957                 .features      = "2 pg_init_retries 50",
958                 .hwhandler     = "1 rdac",
959                 .pgpolicy      = GROUP_BY_PRIO,
960                 .pgfailback    = -FAILBACK_IMMEDIATE,
961                 .rr_weight     = RR_WEIGHT_NONE,
962                 .no_path_retry = 15,
963                 .checker_name  = RDAC,
964                 .prio_name     = PRIO_RDAC,
965                 .prio_args     = NULL,
966         },
967         /* NEC Storage M Series */
968         {
969                 .vendor        = "NEC",
970                 .product       = "DISK ARRAY",
971                 .features      = DEFAULT_FEATURES,
972                 .hwhandler     = "1 alua",
973                 .pgpolicy      = GROUP_BY_PRIO,
974                 .pgfailback    = -FAILBACK_IMMEDIATE,
975                 .rr_weight     = RR_WEIGHT_NONE,
976                 .no_path_retry = NO_PATH_RETRY_UNDEF,
977                 .checker_name  = TUR,
978                 .prio_name     = PRIO_ALUA,
979                 .prio_args     = NULL,
980         },
981         /*
982          * STK arrays
983          *
984          * Maintainer : Christophe Varoqui
985          * Mail : christophe.varoqui@opensvc.com
986          */
987         {
988                 .vendor        = "STK",
989                 .product       = "OPENstorage D280",
990                 .bl_product    = "Universal Xport",
991                 .features      = DEFAULT_FEATURES,
992                 .hwhandler     = "1 rdac",
993                 .pgpolicy      = GROUP_BY_PRIO,
994                 .pgfailback    = -FAILBACK_IMMEDIATE,
995                 .rr_weight     = RR_WEIGHT_NONE,
996                 .no_path_retry = NO_PATH_RETRY_UNDEF,
997                 .checker_name  = TUR,
998                 .prio_name     = PRIO_RDAC,
999                 .prio_args     = NULL,
1000         },
1001         /*
1002          * SUN arrays
1003          *
1004          * Maintainer : Christophe Varoqui
1005          * Mail : christophe.varoqui@opensvc.com
1006          */
1007         {
1008                 .vendor        = "SUN",
1009                 .product       = "(StorEdge 3510|T4)",
1010                 .features      = DEFAULT_FEATURES,
1011                 .hwhandler     = DEFAULT_HWHANDLER,
1012                 .pgpolicy      = MULTIBUS,
1013                 .pgfailback    = FAILBACK_UNDEF,
1014                 .rr_weight     = RR_WEIGHT_NONE,
1015                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1016                 .checker_name  = DIRECTIO,
1017                 .prio_name     = DEFAULT_PRIO,
1018                 .prio_args     = NULL,
1019         },
1020         {
1021                 .vendor        = "SUN",
1022                 .product       = "STK6580_6780",
1023                 .features      = DEFAULT_FEATURES,
1024                 .hwhandler     = "1 rdac",
1025                 .pgpolicy      = GROUP_BY_PRIO,
1026                 .pgfailback    = -FAILBACK_IMMEDIATE,
1027                 .rr_weight     = RR_WEIGHT_NONE,
1028                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1029                 .checker_name  = TUR,
1030                 .prio_name     = PRIO_RDAC,
1031                 .prio_args     = NULL,
1032         },
1033         {
1034                 .vendor        = "EUROLOGC",
1035                 .product       = "FC2502",
1036                 .features      = DEFAULT_FEATURES,
1037                 .hwhandler     = DEFAULT_HWHANDLER,
1038                 .pgpolicy      = GROUP_BY_PRIO,
1039                 .pgfailback    = FAILBACK_UNDEF,
1040                 .rr_weight     = RR_WEIGHT_NONE,
1041                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1042                 .checker_name  = DEFAULT_CHECKER,
1043                 .prio_name     = DEFAULT_PRIO,
1044                 .prio_args     = NULL,
1045         },
1046         /*
1047          * Pivot3 RAIGE
1048          *
1049          * Maintainer : Bart Brooks, Pivot3
1050          * Mail : bartb@pivot3.com
1051          */
1052         {
1053                 .vendor        = "PIVOT3",
1054                 .product       = "RAIGE VOLUME",
1055                 .features      = "1 queue_if_no_path",
1056                 .hwhandler     = DEFAULT_HWHANDLER,
1057                 .pgpolicy      = MULTIBUS,
1058                 .pgfailback    = FAILBACK_UNDEF,
1059                 .rr_weight     = RR_WEIGHT_NONE,
1060                 .no_path_retry = NO_PATH_RETRY_UNDEF,
1061                 .minio         = 100,
1062                 .checker_name  = TUR,
1063                 .prio_name     = DEFAULT_PRIO,
1064                 .prio_args     = NULL,
1065         },
1066         {
1067                 .vendor        = "SUN",
1068                 .product       = "CSM200_R",
1069                 .bl_product    = "Universal Xport",
1070                 .features      = DEFAULT_FEATURES,
1071                 .hwhandler     = "1 rdac",
1072                 .pgpolicy      = GROUP_BY_PRIO,
1073                 .pgfailback    = -FAILBACK_IMMEDIATE,
1074                 .rr_weight     = RR_WEIGHT_NONE,
1075                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1076                 .checker_name  = RDAC,
1077                 .prio_name     = PRIO_RDAC,
1078                 .prio_args     = NULL,
1079         },
1080         /* SUN/LSI 2510, 2540, 2530, 2540 */
1081         {
1082                 .vendor        = "SUN",
1083                 .product       = "LCSM100_[IEFS]",
1084                 .bl_product    = "Universal Xport",
1085                 .features      = DEFAULT_FEATURES,
1086                 .hwhandler     = "1 rdac",
1087                 .pgpolicy      = GROUP_BY_PRIO,
1088                 .pgfailback    = -FAILBACK_IMMEDIATE,
1089                 .rr_weight     = RR_WEIGHT_NONE,
1090                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1091                 .checker_name  = RDAC,
1092                 .prio_name     = PRIO_RDAC,
1093                 .prio_args     = NULL,
1094         },
1095         /* StorageTek 6180 */
1096         {
1097                 .vendor        = "SUN",
1098                 .product       = "SUN_6180",
1099                 .features      = DEFAULT_FEATURES,
1100                 .hwhandler     = "1 rdac",
1101                 .pgpolicy      = GROUP_BY_PRIO,
1102                 .pgfailback    = -FAILBACK_IMMEDIATE,
1103                 .rr_weight     = RR_WEIGHT_NONE,
1104                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1105                 .minio         = DEFAULT_MINIO,
1106                 .minio_rq      = DEFAULT_MINIO_RQ,
1107                 .checker_name  = RDAC,
1108                 .prio_name     = PRIO_RDAC,
1109         },
1110         /* LSI/Engenio/NetApp E-Series RDAC storage
1111          *
1112          * Maintainer : Sean Stewart
1113          * Mail : sean.stewart@netapp.com
1114          */
1115         {
1116                 .vendor        = "(NETAPP|LSI|ENGENIO)",
1117                 .product       = "INF-01-00",
1118                 .bl_product    = "Universal Xport",
1119                 .features      = "2 pg_init_retries 50",
1120                 .hwhandler     = "1 rdac",
1121                 .pgpolicy      = GROUP_BY_PRIO,
1122                 .pgfailback    = -FAILBACK_IMMEDIATE,
1123                 .rr_weight     = RR_WEIGHT_NONE,
1124                 .no_path_retry = 30,
1125                 .checker_name  = RDAC,
1126                 .prio_name     = PRIO_RDAC,
1127                 .prio_args     = NULL,
1128                 .detect_prio   = DETECT_PRIO_ON,
1129                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
1130         },
1131         {
1132                 .vendor        = "STK",
1133                 .product       = "FLEXLINE 380",
1134                 .bl_product    = "Universal Xport",
1135                 .features      = DEFAULT_FEATURES,
1136                 .hwhandler     = "1 rdac",
1137                 .pgpolicy      = GROUP_BY_PRIO,
1138                 .pgfailback    = -FAILBACK_IMMEDIATE,
1139                 .rr_weight     = RR_WEIGHT_NONE,
1140                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1141                 .checker_name  = RDAC,
1142                 .prio_name     = PRIO_RDAC,
1143                 .prio_args     = NULL,
1144         },
1145         {
1146                 .vendor        = "Intel",
1147                 .product       = "Multi-Flex",
1148                 .features      = DEFAULT_FEATURES,
1149                 .hwhandler     = "1 alua",
1150                 .pgpolicy      = GROUP_BY_PRIO,
1151                 .pgfailback    = -FAILBACK_IMMEDIATE,
1152                 .rr_weight     = RR_WEIGHT_NONE,
1153                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1154                 .checker_name  = TUR,
1155                 .prio_name     = PRIO_ALUA,
1156                 .prio_args     = NULL,
1157         },
1158         {
1159                 .vendor        = "(LIO-ORG|SUSE)",
1160                 .product       = "RBD",
1161                 .features      = DEFAULT_FEATURES,
1162                 .hwhandler     = "1 alua",
1163                 .pgpolicy      = GROUP_BY_PRIO,
1164                 .pgfailback    = -FAILBACK_IMMEDIATE,
1165                 .rr_weight     = RR_WEIGHT_NONE,
1166                 .no_path_retry = 12,
1167                 .checker_name  = TUR,
1168                 .minio         = 100,
1169                 .prio_name     = PRIO_ALUA,
1170                 .prio_args     = NULL,
1171         },
1172         {
1173                 .vendor        = "DataCore",
1174                 .product       = "SANmelody",
1175                 .features      = DEFAULT_FEATURES,
1176                 .hwhandler     = DEFAULT_HWHANDLER,
1177                 .pgpolicy      = GROUP_BY_PRIO,
1178                 .pgfailback    = -FAILBACK_IMMEDIATE,
1179                 .rr_weight     = RR_WEIGHT_NONE,
1180                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1181                 .checker_name  = TUR,
1182                 .prio_name     = PRIO_ALUA,
1183                 .prio_args     = NULL,
1184         },
1185         {
1186                 .vendor        = "DataCore",
1187                 .product       = "Virtual Disk",
1188                 .features      = DEFAULT_FEATURES,
1189                 .hwhandler     = DEFAULT_HWHANDLER,
1190                 .pgpolicy      = GROUP_BY_PRIO,
1191                 .pgfailback    = -FAILBACK_IMMEDIATE,
1192                 .rr_weight     = RR_WEIGHT_NONE,
1193                 .no_path_retry = NO_PATH_RETRY_QUEUE,
1194                 .checker_name  = TUR,
1195                 .prio_name     = PRIO_ALUA,
1196                 .prio_args     = NULL,
1197         },
1198         {
1199                 .vendor        = "PURE",
1200                 .product       = "FlashArray",
1201                 .features      = DEFAULT_FEATURES,
1202                 .hwhandler     = DEFAULT_HWHANDLER,
1203                 .selector      = "queue-length 0",
1204                 .pgpolicy      = MULTIBUS,
1205                 .pgfailback    = -FAILBACK_IMMEDIATE,
1206                 .checker_name  = TUR,
1207                 .fast_io_fail  = 10,
1208                 .user_friendly_names = USER_FRIENDLY_NAMES_OFF,
1209                 .prio_name     = DEFAULT_PRIO,
1210                 .no_path_retry = 0,
1211                 .dev_loss      = 60,
1212                 .prio_args     = NULL,
1213         },
1214         /*
1215          * EOL
1216          */
1217         {
1218                 .vendor        = NULL,
1219                 .product       = NULL,
1220                 .features      = NULL,
1221                 .hwhandler     = NULL,
1222                 .selector      = NULL,
1223                 .pgpolicy      = 0,
1224                 .pgfailback    = 0,
1225                 .rr_weight     = 0,
1226                 .no_path_retry = 0,
1227                 .minio         = 0,
1228                 .minio_rq      = 0,
1229                 .checker_name  = NULL,
1230                 .prio_name     = NULL,
1231                 .prio_args     = NULL,
1232         },
1233 };
1234
1235 extern int
1236 setup_default_hwtable (vector hw)
1237 {
1238         int r = 0;
1239         struct hwentry * hwe = default_hw;
1240
1241         while (hwe->vendor) {
1242                 r += store_hwe(hw, hwe);
1243                 hwe++;
1244         }
1245         return r;
1246 }