9 #include "pgpolicies.h"
12 * Tuning suggestions on these parameters should go to
15 * You are welcome to claim maintainership over a controller
16 * family. Please mail the currently enlisted maintainer and
17 * the upstream package maintainer.
19 static struct hwentry default_hw[] = {
21 * Apple controller family
23 * Maintainer : Shyam Sundar
24 * Mail : g.shyamsundar@yahoo.co.in
28 .product = "Xserve RAID ",
29 .getuid = DEFAULT_GETUID,
31 .features = DEFAULT_FEATURES,
32 .hwhandler = DEFAULT_HWHANDLER,
33 .selector = DEFAULT_SELECTOR,
35 .pgfailback = FAILBACK_UNDEF,
36 .rr_weight = RR_WEIGHT_NONE,
37 .no_path_retry = NO_PATH_RETRY_UNDEF,
38 .minio = DEFAULT_MINIO,
39 .checker_name = DEFAULT_CHECKER,
42 * StorageWorks controller family
44 * Maintainer : Christophe Varoqui
45 * Mail : christophe.varoqui@free.fr
50 .getuid = DEFAULT_GETUID,
52 .features = DEFAULT_FEATURES,
53 .hwhandler = DEFAULT_HWHANDLER,
54 .selector = DEFAULT_SELECTOR,
56 .pgfailback = FAILBACK_UNDEF,
57 .rr_weight = RR_WEIGHT_NONE,
58 .no_path_retry = NO_PATH_RETRY_UNDEF,
59 .minio = DEFAULT_MINIO,
60 .checker_name = DEFAULT_CHECKER,
65 .getuid = DEFAULT_GETUID,
66 .getprio = "/sbin/mpath_prio_hp_sw /dev/%n",
67 .features = "1 queue_if_no_path",
68 .hwhandler = "1 hp_sw",
69 .selector = DEFAULT_SELECTOR,
70 .pgpolicy = GROUP_BY_PRIO,
71 .pgfailback = FAILBACK_UNDEF,
72 .rr_weight = RR_WEIGHT_NONE,
73 .no_path_retry = NO_PATH_RETRY_UNDEF,
74 .minio = DEFAULT_MINIO,
75 .checker_name = HP_SW,
80 .getuid = DEFAULT_GETUID,
82 .features = DEFAULT_FEATURES,
83 .hwhandler = DEFAULT_HWHANDLER,
84 .selector = DEFAULT_SELECTOR,
86 .pgfailback = FAILBACK_UNDEF,
87 .rr_weight = RR_WEIGHT_NONE,
88 .no_path_retry = NO_PATH_RETRY_UNDEF,
89 .minio = DEFAULT_MINIO,
90 .checker_name = READSECTOR0,
93 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
94 .vendor = "(COMPAQ|HP)",
95 .product = "(MSA|HSV)1.0.*",
96 .getuid = DEFAULT_GETUID,
97 .getprio = "/sbin/mpath_prio_hp_sw /dev/%n",
98 .features = "1 queue_if_no_path",
99 .hwhandler = "1 hp_sw",
100 .selector = DEFAULT_SELECTOR,
101 .pgpolicy = GROUP_BY_PRIO,
102 .pgfailback = FAILBACK_UNDEF,
103 .rr_weight = RR_WEIGHT_NONE,
104 .no_path_retry = NO_PATH_RETRY_UNDEF,
105 .minio = DEFAULT_MINIO,
106 .checker_name = HP_SW,
109 /* MSA 1000/1500 with new firmware */
111 .product = "MSA VOLUME",
112 .getuid = DEFAULT_GETUID,
113 .getprio = "/sbin/mpath_prio_alua /dev/%n",
114 .features = DEFAULT_FEATURES,
115 .hwhandler = DEFAULT_HWHANDLER,
116 .selector = DEFAULT_SELECTOR,
117 .pgpolicy = GROUP_BY_PRIO,
118 .pgfailback = -FAILBACK_IMMEDIATE,
119 .rr_weight = RR_WEIGHT_NONE,
120 .no_path_retry = NO_PATH_RETRY_UNDEF,
121 .minio = DEFAULT_MINIO,
125 /* EVA 3000/5000 with new firmware */
126 .vendor = "(COMPAQ|HP)",
127 .product = "(MSA|HSV)1.1.*",
128 .getuid = DEFAULT_GETUID,
129 .getprio = "/sbin/mpath_prio_alua /dev/%n",
130 .features = DEFAULT_FEATURES,
131 .hwhandler = DEFAULT_HWHANDLER,
132 .selector = DEFAULT_SELECTOR,
133 .pgpolicy = GROUP_BY_PRIO,
134 .pgfailback = -FAILBACK_IMMEDIATE,
135 .rr_weight = RR_WEIGHT_NONE,
136 .no_path_retry = NO_PATH_RETRY_UNDEF,
137 .minio = DEFAULT_MINIO,
141 /* EVA 4000/6000/8000 */
144 .getuid = DEFAULT_GETUID,
145 .getprio = "/sbin/mpath_prio_alua /dev/%n",
146 .features = DEFAULT_FEATURES,
147 .hwhandler = DEFAULT_HWHANDLER,
148 .selector = DEFAULT_SELECTOR,
149 .pgpolicy = GROUP_BY_PRIO,
150 .pgfailback = -FAILBACK_IMMEDIATE,
151 .rr_weight = RR_WEIGHT_NONE,
152 .no_path_retry = NO_PATH_RETRY_UNDEF,
153 .minio = DEFAULT_MINIO,
159 .product = "LOGICAL VOLUME.*",
160 .getuid = "/lib/udev/scsi_id -n -g -u -s /block/%n",
162 .features = DEFAULT_FEATURES,
163 .hwhandler = DEFAULT_HWHANDLER,
164 .selector = DEFAULT_SELECTOR,
165 .pgpolicy = MULTIBUS,
166 .pgfailback = FAILBACK_UNDEF,
167 .rr_weight = RR_WEIGHT_NONE,
168 .no_path_retry = NO_PATH_RETRY_UNDEF,
169 .minio = DEFAULT_MINIO,
173 * DDN controller family
175 * Maintainer : Christophe Varoqui
176 * Mail : christophe.varoqui@free.fr
180 .product = "SAN DataDirector",
181 .getuid = DEFAULT_GETUID,
183 .features = DEFAULT_FEATURES,
184 .hwhandler = DEFAULT_HWHANDLER,
185 .selector = DEFAULT_SELECTOR,
186 .pgpolicy = MULTIBUS,
187 .pgfailback = FAILBACK_UNDEF,
188 .rr_weight = RR_WEIGHT_NONE,
189 .no_path_retry = NO_PATH_RETRY_UNDEF,
190 .minio = DEFAULT_MINIO,
191 .checker_name = DIRECTIO,
194 * EMC / Clariion controller family
196 * Maintainer : Edward Goggin, EMC
197 * Mail : egoggin@emc.com
201 .product = "SYMMETRIX",
202 .getuid = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n",
204 .features = DEFAULT_FEATURES,
205 .hwhandler = DEFAULT_HWHANDLER,
206 .selector = DEFAULT_SELECTOR,
207 .pgpolicy = MULTIBUS,
208 .pgfailback = FAILBACK_UNDEF,
209 .rr_weight = RR_WEIGHT_NONE,
210 .no_path_retry = NO_PATH_RETRY_UNDEF,
211 .minio = DEFAULT_MINIO,
212 .checker_name = READSECTOR0,
217 .bl_product = "LUNZ",
218 .getuid = DEFAULT_GETUID,
219 .getprio = "/sbin/mpath_prio_emc /dev/%n",
220 .features = "1 queue_if_no_path",
221 .hwhandler = "1 emc",
222 .selector = DEFAULT_SELECTOR,
223 .pgpolicy = GROUP_BY_PRIO,
224 .pgfailback = -FAILBACK_IMMEDIATE,
225 .rr_weight = RR_WEIGHT_NONE,
226 .no_path_retry = (300 / DEFAULT_CHECKINT),
227 .minio = DEFAULT_MINIO,
228 .checker_name = EMC_CLARIION,
231 * Fujitsu controller family
233 * Maintainer : Christophe Varoqui
234 * Mail : christophe.varoqui@free.fr
238 .product = "CentricStor",
239 .getuid = DEFAULT_GETUID,
241 .features = DEFAULT_FEATURES,
242 .hwhandler = DEFAULT_HWHANDLER,
243 .selector = DEFAULT_SELECTOR,
244 .pgpolicy = GROUP_BY_SERIAL,
245 .pgfailback = FAILBACK_UNDEF,
246 .rr_weight = RR_WEIGHT_NONE,
247 .no_path_retry = NO_PATH_RETRY_UNDEF,
248 .minio = DEFAULT_MINIO,
249 .checker_name = READSECTOR0,
252 * Hitachi controller family
254 * Maintainer : Matthias Rudolph
255 * Mail : matthias.rudolph@hds.com
258 .vendor = "(HITACHI|HP)",
259 .product = "OPEN-.*",
260 .getuid = DEFAULT_GETUID,
262 .features = "1 queue_if_no_path",
263 .hwhandler = DEFAULT_HWHANDLER,
264 .selector = DEFAULT_SELECTOR,
265 .pgpolicy = MULTIBUS,
266 .pgfailback = FAILBACK_UNDEF,
267 .rr_weight = RR_WEIGHT_NONE,
268 .no_path_retry = NO_PATH_RETRY_UNDEF,
269 .minio = DEFAULT_MINIO,
275 .getuid = DEFAULT_GETUID,
276 .getprio = "/sbin/mpath_prio_hds_modular /dev/%n",
277 .features = "1 queue_if_no_path",
278 .hwhandler = DEFAULT_HWHANDLER,
279 .selector = DEFAULT_SELECTOR,
280 .pgpolicy = GROUP_BY_PRIO,
281 .pgfailback = -FAILBACK_IMMEDIATE,
282 .rr_weight = RR_WEIGHT_NONE,
283 .no_path_retry = NO_PATH_RETRY_UNDEF,
284 .minio = DEFAULT_MINIO,
288 * IBM controller family
290 * Maintainer : Hannes Reinecke, SuSE
291 * Mail : hare@suse.de
295 .product = "ProFibre 4000R",
296 .getuid = DEFAULT_GETUID,
298 .features = DEFAULT_FEATURES,
299 .hwhandler = DEFAULT_HWHANDLER,
300 .selector = DEFAULT_SELECTOR,
301 .pgpolicy = MULTIBUS,
302 .pgfailback = FAILBACK_UNDEF,
303 .rr_weight = RR_WEIGHT_NONE,
304 .no_path_retry = NO_PATH_RETRY_UNDEF,
305 .minio = DEFAULT_MINIO,
306 .checker_name = READSECTOR0,
309 /* IBM DS4100 / FAStT100 */
312 .getuid = DEFAULT_GETUID,
313 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
314 .features = DEFAULT_FEATURES,
315 .hwhandler = DEFAULT_HWHANDLER,
316 .selector = DEFAULT_SELECTOR,
317 .pgpolicy = GROUP_BY_PRIO,
318 .pgfailback = -FAILBACK_IMMEDIATE,
319 .rr_weight = RR_WEIGHT_NONE,
320 .no_path_retry = NO_PATH_RETRY_UNDEF,
321 .minio = DEFAULT_MINIO,
325 /* IBM Netfinity Fibre Channel RAID Controller Unit */
328 .getuid = DEFAULT_GETUID,
329 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
330 .features = DEFAULT_FEATURES,
331 .hwhandler = DEFAULT_HWHANDLER,
332 .selector = DEFAULT_SELECTOR,
333 .pgpolicy = GROUP_BY_PRIO,
334 .pgfailback = -FAILBACK_IMMEDIATE,
335 .rr_weight = RR_WEIGHT_NONE,
336 .no_path_retry = NO_PATH_RETRY_UNDEF,
337 .minio = DEFAULT_MINIO,
341 /* IBM DS4200 / FAStT200 */
344 .getuid = DEFAULT_GETUID,
346 .features = DEFAULT_FEATURES,
347 .hwhandler = DEFAULT_HWHANDLER,
348 .selector = DEFAULT_SELECTOR,
349 .pgpolicy = GROUP_BY_SERIAL,
350 .pgfailback = FAILBACK_UNDEF,
351 .rr_weight = RR_WEIGHT_NONE,
352 .no_path_retry = NO_PATH_RETRY_UNDEF,
353 .minio = DEFAULT_MINIO,
357 /* IBM ESS F20 aka Shark */
359 .product = "2105(800|F20)",
360 .getuid = DEFAULT_GETUID,
362 .features = "1 queue_if_no_path",
363 .hwhandler = DEFAULT_HWHANDLER,
364 .selector = DEFAULT_SELECTOR,
365 .pgpolicy = GROUP_BY_SERIAL,
366 .pgfailback = FAILBACK_UNDEF,
367 .rr_weight = RR_WEIGHT_NONE,
368 .no_path_retry = NO_PATH_RETRY_UNDEF,
369 .minio = DEFAULT_MINIO,
375 .product = "1750500",
376 .getuid = DEFAULT_GETUID,
377 .getprio = "/sbin/mpath_prio_alua /dev/%n",
378 .features = "1 queue_if_no_path",
379 .hwhandler = DEFAULT_HWHANDLER,
380 .selector = DEFAULT_SELECTOR,
381 .pgpolicy = GROUP_BY_PRIO,
382 .pgfailback = -FAILBACK_IMMEDIATE,
383 .rr_weight = RR_WEIGHT_NONE,
384 .no_path_retry = NO_PATH_RETRY_UNDEF,
385 .minio = DEFAULT_MINIO,
391 .product = "2107900",
392 .getuid = DEFAULT_GETUID,
394 .features = "1 queue_if_no_path",
395 .hwhandler = DEFAULT_HWHANDLER,
396 .selector = DEFAULT_SELECTOR,
397 .pgpolicy = MULTIBUS,
398 .pgfailback = FAILBACK_UNDEF,
399 .rr_weight = RR_WEIGHT_NONE,
400 .no_path_retry = NO_PATH_RETRY_UNDEF,
401 .minio = DEFAULT_MINIO,
405 /* IBM SAN Volume Controller */
408 .getuid = DEFAULT_GETUID,
409 .getprio = "/sbin/mpath_prio_alua /dev/%n",
410 .features = "1 queue_if_no_path",
411 .hwhandler = DEFAULT_HWHANDLER,
412 .selector = DEFAULT_SELECTOR,
413 .pgpolicy = GROUP_BY_PRIO,
414 .pgfailback = -FAILBACK_IMMEDIATE,
415 .rr_weight = RR_WEIGHT_NONE,
416 .no_path_retry = NO_PATH_RETRY_UNDEF,
417 .minio = DEFAULT_MINIO,
421 /* IBM S/390 ECKD DASD */
423 .product = "S/390 DASD ECKD",
424 .bl_product = "S/390.*",
425 .getuid = "/sbin/dasdinfo -u -b %n",
427 .features = "1 queue_if_no_path",
428 .hwhandler = DEFAULT_HWHANDLER,
429 .selector = DEFAULT_SELECTOR,
430 .pgpolicy = MULTIBUS,
431 .pgfailback = FAILBACK_UNDEF,
432 .rr_weight = RR_WEIGHT_NONE,
433 .no_path_retry = NO_PATH_RETRY_UNDEF,
434 .minio = DEFAULT_MINIO,
435 .checker_name = DIRECTIO,
438 * NETAPP controller family
440 * Maintainer : Dave Wysochanski
441 * Mail : davidw@netapp.com
446 .getuid = DEFAULT_GETUID,
447 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
448 .features = "1 queue_if_no_path",
449 .hwhandler = DEFAULT_HWHANDLER,
450 .selector = DEFAULT_SELECTOR,
451 .pgpolicy = GROUP_BY_PRIO,
452 .pgfailback = -FAILBACK_IMMEDIATE,
453 .rr_weight = RR_WEIGHT_NONE,
454 .no_path_retry = NO_PATH_RETRY_UNDEF,
456 .checker_name = READSECTOR0,
459 * IBM NSeries (NETAPP) controller family
461 * Maintainer : Dave Wysochanski
462 * Mail : davidw@netapp.com
466 .product = "Nseries.*",
467 .getuid = DEFAULT_GETUID,
468 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
469 .features = "1 queue_if_no_path",
470 .hwhandler = DEFAULT_HWHANDLER,
471 .selector = DEFAULT_SELECTOR,
472 .pgpolicy = GROUP_BY_PRIO,
473 .pgfailback = -FAILBACK_IMMEDIATE,
474 .rr_weight = RR_WEIGHT_NONE,
475 .no_path_retry = NO_PATH_RETRY_UNDEF,
477 .checker_name = READSECTOR0,
480 * Pillar Data controller family
482 * Maintainer : Srinivasan Ramani
483 * Mail : sramani@pillardata.com
487 .product = "Axiom.*",
488 .getuid = DEFAULT_GETUID,
489 .getprio = "/sbin/mpath_prio_alua %n",
490 .features = DEFAULT_FEATURES,
491 .hwhandler = DEFAULT_HWHANDLER,
492 .selector = DEFAULT_SELECTOR,
493 .pgpolicy = GROUP_BY_PRIO,
494 .pgfailback = FAILBACK_UNDEF,
495 .rr_weight = RR_WEIGHT_NONE,
496 .no_path_retry = NO_PATH_RETRY_UNDEF,
497 .minio = DEFAULT_MINIO,
503 * Maintainer : Christophe Varoqui
504 * Mail : christophe.varoqui@free.fr
508 .product = "TP9[13]00",
509 .getuid = DEFAULT_GETUID,
511 .features = DEFAULT_FEATURES,
512 .hwhandler = DEFAULT_HWHANDLER,
513 .selector = DEFAULT_SELECTOR,
514 .pgpolicy = MULTIBUS,
515 .pgfailback = FAILBACK_UNDEF,
516 .rr_weight = RR_WEIGHT_NONE,
517 .no_path_retry = NO_PATH_RETRY_UNDEF,
518 .minio = DEFAULT_MINIO,
519 .checker_name = READSECTOR0,
523 .product = "TP9[45]00",
524 .getuid = DEFAULT_GETUID,
525 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
526 .features = DEFAULT_FEATURES,
527 .hwhandler = DEFAULT_HWHANDLER,
528 .selector = DEFAULT_SELECTOR,
529 .pgpolicy = GROUP_BY_PRIO,
530 .pgfailback = -FAILBACK_IMMEDIATE,
531 .rr_weight = RR_WEIGHT_NONE,
532 .no_path_retry = NO_PATH_RETRY_QUEUE,
533 .minio = DEFAULT_MINIO,
534 .checker_name = RDAC,
539 .getuid = DEFAULT_GETUID,
540 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
541 .features = DEFAULT_FEATURES,
542 .hwhandler = DEFAULT_HWHANDLER,
543 .selector = DEFAULT_SELECTOR,
544 .pgpolicy = GROUP_BY_PRIO,
545 .pgfailback = -FAILBACK_IMMEDIATE,
546 .rr_weight = RR_WEIGHT_NONE,
547 .no_path_retry = NO_PATH_RETRY_QUEUE,
548 .minio = DEFAULT_MINIO,
549 .checker_name = RDAC,
554 * Maintainer : Christophe Varoqui
555 * Mail : christophe.varoqui@free.fr
559 .product = "OPENstorage D280",
560 .getuid = DEFAULT_GETUID,
561 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
562 .features = DEFAULT_FEATURES,
563 .hwhandler = DEFAULT_HWHANDLER,
564 .selector = DEFAULT_SELECTOR,
565 .pgpolicy = GROUP_BY_PRIO,
566 .pgfailback = -FAILBACK_IMMEDIATE,
567 .rr_weight = RR_WEIGHT_NONE,
568 .no_path_retry = NO_PATH_RETRY_UNDEF,
569 .minio = DEFAULT_MINIO,
575 * Maintainer : Christophe Varoqui
576 * Mail : christophe.varoqui@free.fr
580 .product = "(StorEdge 3510|T4)",
581 .getuid = DEFAULT_GETUID,
583 .features = DEFAULT_FEATURES,
584 .hwhandler = DEFAULT_HWHANDLER,
585 .selector = DEFAULT_SELECTOR,
586 .pgpolicy = MULTIBUS,
587 .pgfailback = FAILBACK_UNDEF,
588 .rr_weight = RR_WEIGHT_NONE,
589 .no_path_retry = NO_PATH_RETRY_UNDEF,
590 .minio = DEFAULT_MINIO,
591 .checker_name = READSECTOR0,
609 .checker_name = NULL,
614 setup_default_hwtable (vector hw)
617 struct hwentry * hwe = default_hw;
619 while (hwe->vendor) {
620 hwe->checker = checker_lookup(hwe->checker_name);
621 r += store_hwe(hw, hwe);