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,
157 * DDN controller family
159 * Maintainer : Christophe Varoqui
160 * Mail : christophe.varoqui@free.fr
164 .product = "SAN DataDirector",
165 .getuid = DEFAULT_GETUID,
167 .features = DEFAULT_FEATURES,
168 .hwhandler = DEFAULT_HWHANDLER,
169 .selector = DEFAULT_SELECTOR,
170 .pgpolicy = MULTIBUS,
171 .pgfailback = FAILBACK_UNDEF,
172 .rr_weight = RR_WEIGHT_NONE,
173 .no_path_retry = NO_PATH_RETRY_UNDEF,
174 .minio = DEFAULT_MINIO,
175 .checker_name = DIRECTIO,
178 * EMC / Clariion controller family
180 * Maintainer : Edward Goggin, EMC
181 * Mail : egoggin@emc.com
185 .product = "SYMMETRIX",
186 .getuid = "/lib/udev/scsi_id -g -u -ppre-spc3-83 -s /block/%n",
188 .features = DEFAULT_FEATURES,
189 .hwhandler = DEFAULT_HWHANDLER,
190 .selector = DEFAULT_SELECTOR,
191 .pgpolicy = MULTIBUS,
192 .pgfailback = FAILBACK_UNDEF,
193 .rr_weight = RR_WEIGHT_NONE,
194 .no_path_retry = NO_PATH_RETRY_UNDEF,
195 .minio = DEFAULT_MINIO,
196 .checker_name = READSECTOR0,
201 .bl_product = "LUNZ",
202 .getuid = DEFAULT_GETUID,
203 .getprio = "/sbin/mpath_prio_emc /dev/%n",
204 .features = "1 queue_if_no_path",
205 .hwhandler = "1 emc",
206 .selector = DEFAULT_SELECTOR,
207 .pgpolicy = GROUP_BY_PRIO,
208 .pgfailback = -FAILBACK_IMMEDIATE,
209 .rr_weight = RR_WEIGHT_NONE,
210 .no_path_retry = (300 / DEFAULT_CHECKINT),
211 .minio = DEFAULT_MINIO,
212 .checker_name = EMC_CLARIION,
215 * Fujitsu controller family
217 * Maintainer : Christophe Varoqui
218 * Mail : christophe.varoqui@free.fr
222 .product = "CentricStor",
223 .getuid = DEFAULT_GETUID,
225 .features = DEFAULT_FEATURES,
226 .hwhandler = DEFAULT_HWHANDLER,
227 .selector = DEFAULT_SELECTOR,
228 .pgpolicy = GROUP_BY_SERIAL,
229 .pgfailback = FAILBACK_UNDEF,
230 .rr_weight = RR_WEIGHT_NONE,
231 .no_path_retry = NO_PATH_RETRY_UNDEF,
232 .minio = DEFAULT_MINIO,
233 .checker_name = READSECTOR0,
236 * Hitachi controller family
238 * Maintainer : Matthias Rudolph
239 * Mail : matthias.rudolph@hds.com
242 .vendor = "(HITACHI|HP)",
243 .product = "OPEN-.*",
244 .getuid = DEFAULT_GETUID,
246 .features = "1 queue_if_no_path",
247 .hwhandler = DEFAULT_HWHANDLER,
248 .selector = DEFAULT_SELECTOR,
249 .pgpolicy = MULTIBUS,
250 .pgfailback = FAILBACK_UNDEF,
251 .rr_weight = RR_WEIGHT_NONE,
252 .no_path_retry = NO_PATH_RETRY_UNDEF,
253 .minio = DEFAULT_MINIO,
259 .getuid = DEFAULT_GETUID,
260 .getprio = "/sbin/mpath_prio_hds_modular /dev/%n",
261 .features = "1 queue_if_no_path",
262 .hwhandler = DEFAULT_HWHANDLER,
263 .selector = DEFAULT_SELECTOR,
264 .pgpolicy = GROUP_BY_PRIO,
265 .pgfailback = -FAILBACK_IMMEDIATE,
266 .rr_weight = RR_WEIGHT_NONE,
267 .no_path_retry = NO_PATH_RETRY_UNDEF,
268 .minio = DEFAULT_MINIO,
272 * IBM controller family
274 * Maintainer : Hannes Reinecke, SuSE
275 * Mail : hare@suse.de
279 .product = "ProFibre 4000R",
280 .getuid = DEFAULT_GETUID,
282 .features = DEFAULT_FEATURES,
283 .hwhandler = DEFAULT_HWHANDLER,
284 .selector = DEFAULT_SELECTOR,
285 .pgpolicy = MULTIBUS,
286 .pgfailback = FAILBACK_UNDEF,
287 .rr_weight = RR_WEIGHT_NONE,
288 .no_path_retry = NO_PATH_RETRY_UNDEF,
289 .minio = DEFAULT_MINIO,
290 .checker_name = READSECTOR0,
293 /* IBM DS4100 / FAStT100 */
296 .getuid = DEFAULT_GETUID,
297 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
298 .features = DEFAULT_FEATURES,
299 .hwhandler = DEFAULT_HWHANDLER,
300 .selector = DEFAULT_SELECTOR,
301 .pgpolicy = GROUP_BY_PRIO,
302 .pgfailback = -FAILBACK_IMMEDIATE,
303 .rr_weight = RR_WEIGHT_NONE,
304 .no_path_retry = NO_PATH_RETRY_UNDEF,
305 .minio = DEFAULT_MINIO,
309 /* IBM Netfinity Fibre Channel RAID Controller Unit */
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 DS4200 / FAStT200 */
328 .getuid = DEFAULT_GETUID,
330 .features = DEFAULT_FEATURES,
331 .hwhandler = DEFAULT_HWHANDLER,
332 .selector = DEFAULT_SELECTOR,
333 .pgpolicy = GROUP_BY_SERIAL,
334 .pgfailback = FAILBACK_UNDEF,
335 .rr_weight = RR_WEIGHT_NONE,
336 .no_path_retry = NO_PATH_RETRY_UNDEF,
337 .minio = DEFAULT_MINIO,
341 /* IBM ESS F20 aka Shark */
343 .product = "2105(800|F20)",
344 .getuid = DEFAULT_GETUID,
346 .features = "1 queue_if_no_path",
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,
359 .product = "1750500",
360 .getuid = DEFAULT_GETUID,
361 .getprio = "/sbin/mpath_prio_alua /dev/%n",
362 .features = "1 queue_if_no_path",
363 .hwhandler = DEFAULT_HWHANDLER,
364 .selector = DEFAULT_SELECTOR,
365 .pgpolicy = GROUP_BY_PRIO,
366 .pgfailback = -FAILBACK_IMMEDIATE,
367 .rr_weight = RR_WEIGHT_NONE,
368 .no_path_retry = NO_PATH_RETRY_UNDEF,
369 .minio = DEFAULT_MINIO,
375 .product = "2107900",
376 .getuid = DEFAULT_GETUID,
378 .features = "1 queue_if_no_path",
379 .hwhandler = DEFAULT_HWHANDLER,
380 .selector = DEFAULT_SELECTOR,
381 .pgpolicy = MULTIBUS,
382 .pgfailback = FAILBACK_UNDEF,
383 .rr_weight = RR_WEIGHT_NONE,
384 .no_path_retry = NO_PATH_RETRY_UNDEF,
385 .minio = DEFAULT_MINIO,
389 /* IBM SAN Volume Controller */
392 .getuid = DEFAULT_GETUID,
393 .getprio = "/sbin/mpath_prio_alua /dev/%n",
394 .features = "1 queue_if_no_path",
395 .hwhandler = DEFAULT_HWHANDLER,
396 .selector = DEFAULT_SELECTOR,
397 .pgpolicy = GROUP_BY_PRIO,
398 .pgfailback = -FAILBACK_IMMEDIATE,
399 .rr_weight = RR_WEIGHT_NONE,
400 .no_path_retry = NO_PATH_RETRY_UNDEF,
401 .minio = DEFAULT_MINIO,
405 /* IBM S/390 ECKD DASD */
407 .product = "S/390 DASD ECKD",
408 .bl_product = "S/390.*",
409 .getuid = "/sbin/dasdinfo -u -b %n",
411 .features = "1 queue_if_no_path",
412 .hwhandler = DEFAULT_HWHANDLER,
413 .selector = DEFAULT_SELECTOR,
414 .pgpolicy = MULTIBUS,
415 .pgfailback = FAILBACK_UNDEF,
416 .rr_weight = RR_WEIGHT_NONE,
417 .no_path_retry = NO_PATH_RETRY_UNDEF,
418 .minio = DEFAULT_MINIO,
419 .checker_name = DIRECTIO,
422 * NETAPP controller family
424 * Maintainer : Dave Wysochanski
425 * Mail : davidw@netapp.com
430 .getuid = DEFAULT_GETUID,
431 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
432 .features = "1 queue_if_no_path",
433 .hwhandler = DEFAULT_HWHANDLER,
434 .selector = DEFAULT_SELECTOR,
435 .pgpolicy = GROUP_BY_PRIO,
436 .pgfailback = -FAILBACK_IMMEDIATE,
437 .rr_weight = RR_WEIGHT_NONE,
438 .no_path_retry = NO_PATH_RETRY_UNDEF,
440 .checker_name = READSECTOR0,
443 * IBM NSeries (NETAPP) controller family
445 * Maintainer : Dave Wysochanski
446 * Mail : davidw@netapp.com
450 .product = "Nseries.*",
451 .getuid = DEFAULT_GETUID,
452 .getprio = "/sbin/mpath_prio_netapp /dev/%n",
453 .features = "1 queue_if_no_path",
454 .hwhandler = DEFAULT_HWHANDLER,
455 .selector = DEFAULT_SELECTOR,
456 .pgpolicy = GROUP_BY_PRIO,
457 .pgfailback = -FAILBACK_IMMEDIATE,
458 .rr_weight = RR_WEIGHT_NONE,
459 .no_path_retry = NO_PATH_RETRY_UNDEF,
461 .checker_name = READSECTOR0,
464 * Pillar Data controller family
466 * Maintainer : Srinivasan Ramani
467 * Mail : sramani@pillardata.com
471 .product = "Axiom.*",
472 .getuid = DEFAULT_GETUID,
473 .getprio = "/sbin/mpath_prio_alua %n",
474 .features = DEFAULT_FEATURES,
475 .hwhandler = DEFAULT_HWHANDLER,
476 .selector = DEFAULT_SELECTOR,
477 .pgpolicy = GROUP_BY_PRIO,
478 .pgfailback = FAILBACK_UNDEF,
479 .rr_weight = RR_WEIGHT_NONE,
480 .no_path_retry = NO_PATH_RETRY_UNDEF,
481 .minio = DEFAULT_MINIO,
487 * Maintainer : Christophe Varoqui
488 * Mail : christophe.varoqui@free.fr
492 .product = "TP9[13]00",
493 .getuid = DEFAULT_GETUID,
495 .features = DEFAULT_FEATURES,
496 .hwhandler = DEFAULT_HWHANDLER,
497 .selector = DEFAULT_SELECTOR,
498 .pgpolicy = MULTIBUS,
499 .pgfailback = FAILBACK_UNDEF,
500 .rr_weight = RR_WEIGHT_NONE,
501 .no_path_retry = NO_PATH_RETRY_UNDEF,
502 .minio = DEFAULT_MINIO,
503 .checker_name = READSECTOR0,
507 .product = "TP9[45]00",
508 .getuid = DEFAULT_GETUID,
509 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
510 .features = DEFAULT_FEATURES,
511 .hwhandler = DEFAULT_HWHANDLER,
512 .selector = DEFAULT_SELECTOR,
513 .pgpolicy = GROUP_BY_PRIO,
514 .pgfailback = -FAILBACK_IMMEDIATE,
515 .rr_weight = RR_WEIGHT_NONE,
516 .no_path_retry = NO_PATH_RETRY_QUEUE,
517 .minio = DEFAULT_MINIO,
518 .checker_name = RDAC,
523 .getuid = DEFAULT_GETUID,
524 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
525 .features = DEFAULT_FEATURES,
526 .hwhandler = DEFAULT_HWHANDLER,
527 .selector = DEFAULT_SELECTOR,
528 .pgpolicy = GROUP_BY_PRIO,
529 .pgfailback = -FAILBACK_IMMEDIATE,
530 .rr_weight = RR_WEIGHT_NONE,
531 .no_path_retry = NO_PATH_RETRY_QUEUE,
532 .minio = DEFAULT_MINIO,
533 .checker_name = RDAC,
538 * Maintainer : Christophe Varoqui
539 * Mail : christophe.varoqui@free.fr
543 .product = "OPENstorage D280",
544 .getuid = DEFAULT_GETUID,
545 .getprio = "/sbin/mpath_prio_rdac /dev/%n",
546 .features = DEFAULT_FEATURES,
547 .hwhandler = DEFAULT_HWHANDLER,
548 .selector = DEFAULT_SELECTOR,
549 .pgpolicy = GROUP_BY_PRIO,
550 .pgfailback = -FAILBACK_IMMEDIATE,
551 .rr_weight = RR_WEIGHT_NONE,
552 .no_path_retry = NO_PATH_RETRY_UNDEF,
553 .minio = DEFAULT_MINIO,
559 * Maintainer : Christophe Varoqui
560 * Mail : christophe.varoqui@free.fr
564 .product = "(StorEdge 3510|T4)",
565 .getuid = DEFAULT_GETUID,
567 .features = DEFAULT_FEATURES,
568 .hwhandler = DEFAULT_HWHANDLER,
569 .selector = DEFAULT_SELECTOR,
570 .pgpolicy = MULTIBUS,
571 .pgfailback = FAILBACK_UNDEF,
572 .rr_weight = RR_WEIGHT_NONE,
573 .no_path_retry = NO_PATH_RETRY_UNDEF,
574 .minio = DEFAULT_MINIO,
575 .checker_name = READSECTOR0,
593 .checker_name = NULL,
598 setup_default_hwtable (vector hw)
601 struct hwentry * hwe = default_hw;
603 while (hwe->vendor) {
604 hwe->checker = checker_lookup(hwe->checker_name);
605 r += store_hwe(hw, hwe);