17 * information: Portions Copyright [yyyy] [name of copyright owner] |
17 * information: Portions Copyright [yyyy] [name of copyright owner] |
18 * |
18 * |
19 * CDDL HEADER END |
19 * CDDL HEADER END |
20 */ |
20 */ |
21 /* |
21 /* |
22 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. |
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. |
23 * Use is subject to license terms. |
23 * Use is subject to license terms. |
24 */ |
24 */ |
25 |
25 |
26 #pragma ident "%Z%%M% %I% %E% SMI" |
26 #pragma ident "%Z%%M% %I% %E% SMI" |
27 |
27 |
138 static int have_disk(struct search_args *args, char *devid, |
139 static int have_disk(struct search_args *args, char *devid, |
139 char *kernel_name, disk_t **diskp); |
140 char *kernel_name, disk_t **diskp); |
140 static int is_cluster_disk(di_node_t node, di_minor_t minor); |
141 static int is_cluster_disk(di_node_t node, di_minor_t minor); |
141 static int is_ctds(char *name); |
142 static int is_ctds(char *name); |
142 static int is_drive(di_minor_t minor); |
143 static int is_drive(di_minor_t minor); |
|
144 static int is_zvol(di_node_t node, di_minor_t minor); |
143 static int is_HBA(di_node_t node, di_minor_t minor); |
145 static int is_HBA(di_node_t node, di_minor_t minor); |
144 static int new_alias(disk_t *diskp, char *kernel_path, |
146 static int new_alias(disk_t *diskp, char *kernel_path, |
145 char *devlink_path, struct search_args *args); |
147 char *devlink_path, struct search_args *args); |
146 static int new_devpath(alias_t *ap, char *devpath); |
148 static int new_devpath(alias_t *ap, char *devpath); |
147 static path_t *new_path(controller_t *cp, disk_t *diskp, |
149 static path_t *new_path(controller_t *cp, disk_t *diskp, |
566 if (add_controller(args, node, minor) == NULL) { |
568 if (add_controller(args, node, minor) == NULL) { |
567 args->dev_walk_status = ENOMEM; |
569 args->dev_walk_status = ENOMEM; |
568 result = DI_WALK_TERMINATE; |
570 result = DI_WALK_TERMINATE; |
569 } |
571 } |
570 |
572 |
571 } else if (di_minor_spectype(minor) == S_IFCHR && is_drive(minor)) { |
573 } else if (di_minor_spectype(minor) == S_IFCHR && |
|
574 (is_drive(minor) || is_zvol(node, minor))) { |
572 char *devidstr; |
575 char *devidstr; |
573 char kernel_name[MAXPATHLEN]; |
576 char kernel_name[MAXPATHLEN]; |
574 disk_t *diskp; |
577 disk_t *diskp; |
575 |
578 |
576 (void) snprintf(kernel_name, sizeof (kernel_name), "%s%d", |
579 (void) snprintf(kernel_name, sizeof (kernel_name), "%s%d", |