summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorHans Rosenfeld <hans.rosenfeld@nexenta.com>2016-11-23 20:14:28 +0100
committerHans Rosenfeld <hans.rosenfeld@nexenta.com>2016-12-20 11:39:27 +0100
commit540b2cc7a3cce4677bb918fec08d34cfd5f8c545 (patch)
tree48d756f4acc2a93dbecaf41f5e581c6b37cfd931 /usr/src
parentcead1df3b072a636f2f644cb38b83059f9f01fe8 (diff)
downloadillumos-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.c9
-rw-r--r--usr/src/cmd/devfsadm/devfsadm.c8
-rw-r--r--usr/src/cmd/devfsadm/devfsadm.h8
-rw-r--r--usr/src/cmd/devfsadm/disk_link.c9
-rw-r--r--usr/src/cmd/devfsadm/mapfile-vers2
-rw-r--r--usr/src/cmd/devfsadm/sgen_link.c10
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);
}
}