diff options
author | Hans Rosenfeld <hans.rosenfeld@nexenta.com> | 2016-11-23 20:14:28 +0100 |
---|---|---|
committer | Hans Rosenfeld <hans.rosenfeld@nexenta.com> | 2016-12-20 11:39:27 +0100 |
commit | 540b2cc7a3cce4677bb918fec08d34cfd5f8c545 (patch) | |
tree | 48d756f4acc2a93dbecaf41f5e581c6b37cfd931 /usr/src | |
parent | cead1df3b072a636f2f644cb38b83059f9f01fe8 (diff) | |
download | illumos-joyent-540b2cc7a3cce4677bb918fec08d34cfd5f8c545.tar.gz |
7670 c0 controller instance should be reserved for vhci
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Reviewed by: Sam Zaydel <szaydel@gmail.com>
Reviewed by: Juraj Lutter <juraj.lutter@erigones.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/devfsadm/cfg_link.c | 9 | ||||
-rw-r--r-- | usr/src/cmd/devfsadm/devfsadm.c | 8 | ||||
-rw-r--r-- | usr/src/cmd/devfsadm/devfsadm.h | 8 | ||||
-rw-r--r-- | usr/src/cmd/devfsadm/disk_link.c | 9 | ||||
-rw-r--r-- | usr/src/cmd/devfsadm/mapfile-vers | 2 | ||||
-rw-r--r-- | usr/src/cmd/devfsadm/sgen_link.c | 10 |
6 files changed, 30 insertions, 16 deletions
diff --git a/usr/src/cmd/devfsadm/cfg_link.c b/usr/src/cmd/devfsadm/cfg_link.c index ce59039a75..ffdbc6d0af 100644 --- a/usr/src/cmd/devfsadm/cfg_link.c +++ b/usr/src/cmd/devfsadm/cfg_link.c @@ -20,6 +20,7 @@ */ /* + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -177,7 +178,7 @@ scsi_cfg_creat_cb(di_minor_t minor, di_node_t node) (void) strcat(path, mn); di_devfs_path_free(devfs_path); - if (devfsadm_enumerate_int(path, 1, &c_num, rules, 3) + if (ctrl_enumerate_int(path, 1, &c_num, rules, 3, 0, B_FALSE) == DEVFSADM_FAILURE) { /* * Unlike the disks module we don't retry on failure. @@ -226,7 +227,7 @@ usb_cfg_creat_cb(di_minor_t minor, di_node_t node) (void) snprintf(path, sizeof (path), "%s:%s", cp, di_minor_name(minor)); di_devfs_path_free(cp); - if (devfsadm_enumerate_int(path, 0, &cp, rules, 1)) { + if (ctrl_enumerate_int(path, 0, &cp, rules, 1, 0, B_FALSE)) { return (DEVFSADM_CONTINUE); } @@ -263,7 +264,7 @@ sata_cfg_creat_cb(di_minor_t minor, di_node_t node) di_devfs_path_free(devfspath); /* build the physical path from the components */ - if (devfsadm_enumerate_int(path, 0, &buf, rules, 1) == + if (ctrl_enumerate_int(path, 0, &buf, rules, 1, 0, B_FALSE) == DEVFSADM_FAILURE) { return (DEVFSADM_CONTINUE); } @@ -297,7 +298,7 @@ sdcard_cfg_creat_cb(di_minor_t minor, di_node_t node) di_devfs_path_free(devfspath); /* build the physical path from the components */ - if (devfsadm_enumerate_int(path, 0, &buf, rules, 1) == + if (ctrl_enumerate_int(path, 0, &buf, rules, 1, 0, B_FALSE) == DEVFSADM_FAILURE) { return (DEVFSADM_CONTINUE); } diff --git a/usr/src/cmd/devfsadm/devfsadm.c b/usr/src/cmd/devfsadm/devfsadm.c index 7d7904e9c0..6f2706c21a 100644 --- a/usr/src/cmd/devfsadm/devfsadm.c +++ b/usr/src/cmd/devfsadm/devfsadm.c @@ -21,6 +21,7 @@ /* * Copyright 2016 Toomas Soome <tsoome@me.com> + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -4845,11 +4846,12 @@ devfsadm_enumerate_int(char *devfs_path, int index, char **buf, } int -disk_enumerate_int(char *devfs_path, int index, char **buf, - devfsadm_enumerate_t rules[], int nrules) +ctrl_enumerate_int(char *devfs_path, int index, char **buf, + devfsadm_enumerate_t rules[], int nrules, int multiple, + boolean_t scsi_vhci) { return (find_enum_id(rules, nrules, - devfs_path, index, "0", INTEGER, buf, 1)); + devfs_path, index, scsi_vhci ? "0" : "1", INTEGER, buf, multiple)); } /* diff --git a/usr/src/cmd/devfsadm/devfsadm.h b/usr/src/cmd/devfsadm/devfsadm.h index 3d801f66db..ae630496f8 100644 --- a/usr/src/cmd/devfsadm/devfsadm.h +++ b/usr/src/cmd/devfsadm/devfsadm.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. */ #ifndef _DEVFSADM_H @@ -231,10 +232,11 @@ void devfsadm_free_dev_names(char **dev_names, int len); di_devlink_handle_t devfsadm_devlink_cache(void); /* - * Private enumerate interface for disks and sgen modules + * Private enumerate interface for controllers, disks, and sgen modules */ -int disk_enumerate_int(char *devfs_path, int index, char **buf, - devfsadm_enumerate_t rules[], int nrules); +int ctrl_enumerate_int(char *devfs_path, int index, char **buf, + devfsadm_enumerate_t rules[], int nrules, + int multiple, boolean_t scsi_vhci); /* * Private interfaces for ports module (port_link.c). */ diff --git a/usr/src/cmd/devfsadm/disk_link.c b/usr/src/cmd/devfsadm/disk_link.c index 3e966ac6bd..c68cba8bea 100644 --- a/usr/src/cmd/devfsadm/disk_link.c +++ b/usr/src/cmd/devfsadm/disk_link.c @@ -657,6 +657,7 @@ diskctrl(di_node_t node, di_minor_t minor) char path[PATH_MAX + 1]; char *devfspath; char *buf, *mn; + boolean_t is_vhci; devfsadm_enumerate_t rules[3] = { {"^r?dsk$/^c([0-9]+)", 1, MATCH_PARENT}, @@ -677,9 +678,10 @@ diskctrl(di_node_t node, di_minor_t minor) /* * Use controller component of disk path */ - if (disk_enumerate_int(path, RULE_INDEX, &buf, rules, 3) == - DEVFSADM_MULTIPLE) { + is_vhci = (strncmp(path, "/scsi_vhci/", 11) == 0); + if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 1, is_vhci) == + DEVFSADM_MULTIPLE) { /* * We failed because there are multiple logical controller * numbers for a single physical controller. If we use node @@ -694,7 +696,8 @@ diskctrl(di_node_t node, di_minor_t minor) rules[0].flags = MATCH_NODE | MATCH_UNCACHED; /* disks */ rules[2].flags = MATCH_NODE | MATCH_UNCACHED; /* generic scsi */ - if (devfsadm_enumerate_int(path, RULE_INDEX, &buf, rules, 3)) { + if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 0, + is_vhci)) { return (NULL); } } diff --git a/usr/src/cmd/devfsadm/mapfile-vers b/usr/src/cmd/devfsadm/mapfile-vers index 9c30e217de..ebb7593fb7 100644 --- a/usr/src/cmd/devfsadm/mapfile-vers +++ b/usr/src/cmd/devfsadm/mapfile-vers @@ -1,4 +1,5 @@ # +# Copyright 2016 Nexenta Systems, Inc. All rights reserved. # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # CDDL HEADER START @@ -39,6 +40,7 @@ $mapfile_version 2 # External interface requirements SYMBOL_SCOPE { global: + ctrl_enumerate_int { FLAGS = EXTERN }; devfsadm_devlink_cache { FLAGS = EXTERN }; devfsadm_enumerate_char_start { FLAGS = EXTERN }; devfsadm_enumerate_int { FLAGS = EXTERN }; diff --git a/usr/src/cmd/devfsadm/sgen_link.c b/usr/src/cmd/devfsadm/sgen_link.c index 92289050ac..e4ffa3f8fd 100644 --- a/usr/src/cmd/devfsadm/sgen_link.c +++ b/usr/src/cmd/devfsadm/sgen_link.c @@ -19,6 +19,7 @@ * CDDL HEADER END */ /* + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -186,6 +187,7 @@ find_ctrlr(di_node_t node, di_minor_t minor) char path[PATH_MAX + 1]; char *devfspath; char *buf, *mn; + boolean_t is_vhci; devfsadm_enumerate_t rules[3] = { {"^r?dsk$/^c([0-9]+)", 1, MATCH_PARENT}, @@ -206,9 +208,10 @@ find_ctrlr(di_node_t node, di_minor_t minor) /* * Use controller (parent) component of device path */ - if (disk_enumerate_int(path, RULE_INDEX, &buf, rules, 3) == - DEVFSADM_MULTIPLE) { + is_vhci = (strncmp(path, "/scsi_vhci/", 11) == 0); + if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 1, is_vhci) == + DEVFSADM_MULTIPLE) { /* * We failed because there are multiple logical controller * numbers for a single physical controller. If we use node @@ -222,7 +225,8 @@ find_ctrlr(di_node_t node, di_minor_t minor) */ rules[0].flags = MATCH_NODE | MATCH_UNCACHED; /* disks */ rules[2].flags = MATCH_NODE | MATCH_UNCACHED; /* generic scsi */ - if (devfsadm_enumerate_int(path, RULE_INDEX, &buf, rules, 3)) { + if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 0, + is_vhci)) { return (NULL); } } |