usr/src/lib/libdiskmgt/common/findevs.c
changeset 6423 437422a29d3a
parent 2912 85ea316d9c18
child 6640 c92ca9b95b9c
equal deleted inserted replaced
6422:d51a10d738ba 6423:437422a29d3a
    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 
    35 #include <sys/types.h>
    35 #include <sys/types.h>
    36 #include <ctype.h>
    36 #include <ctype.h>
    37 #include <libgen.h>
    37 #include <libgen.h>
    38 #include <unistd.h>
    38 #include <unistd.h>
    39 #include <devid.h>
    39 #include <devid.h>
       
    40 #include <sys/fs/zfs.h>
    40 
    41 
    41 #include "libdiskmgt.h"
    42 #include "libdiskmgt.h"
    42 #include "disks_private.h"
    43 #include "disks_private.h"
    43 
    44 
    44 #define	CLUSTER_DEV	"did"
    45 #define	CLUSTER_DEV	"did"
   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",
  1571 
  1574 
  1572 	return (0);
  1575 	return (0);
  1573 }
  1576 }
  1574 
  1577 
  1575 static int
  1578 static int
       
  1579 is_zvol(di_node_t node, di_minor_t minor)
       
  1580 {
       
  1581 	if ((strncmp(di_node_name(node), ZFS_DRIVER, 3) == 0) &&
       
  1582 	    di_minor_devt(minor))
       
  1583 		return (1);
       
  1584 	return (0);
       
  1585 }
       
  1586 
       
  1587 static int
  1576 is_HBA(di_node_t node, di_minor_t minor)
  1588 is_HBA(di_node_t node, di_minor_t minor)
  1577 {
  1589 {
  1578 	char	*type;
  1590 	char	*type;
  1579 	char	*name;
  1591 	char	*name;
  1580 	int	type_index;
  1592 	int	type_index;