summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-10-20 07:59:29 +0000
committermav <mav@FreeBSD.org>2014-10-20 07:59:29 +0000
commitdeb98691d8838c8882bcbf9ef44626af13405f49 (patch)
treefb69f5f51073d50d14e5e5f894a5152290ea2799 /sys/cam
parentd9f8df105feb50aaec3f6bb1e201922382471c95 (diff)
downloadFreeBSD-src-deb98691d8838c8882bcbf9ef44626af13405f49.zip
FreeBSD-src-deb98691d8838c8882bcbf9ef44626af13405f49.tar.gz
MFC r272947: Give physical and virtual ports numbers some more meaning.
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.c8
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.h2
-rw-r--r--sys/cam/ctl/scsi_ctl.c4
3 files changed, 10 insertions, 4 deletions
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.c b/sys/cam/ctl/ctl_frontend_iscsi.c
index 70736bb..f49a6c1 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.c
+++ b/sys/cam/ctl/ctl_frontend_iscsi.c
@@ -2000,7 +2000,8 @@ cfiscsi_ioctl_port_create(struct ctl_req *req)
/* XXX KDM what should the real number be here? */
port->num_requested_ctl_io = 4096;
port->port_name = "iscsi";
- port->virtual_port = strtoul(tag, NULL, 0);
+ port->physical_port = strtoul(tag, NULL, 0);
+ port->virtual_port = ct->ct_target_id;
port->port_online = cfiscsi_online;
port->port_offline = cfiscsi_offline;
port->port_info = cfiscsi_info;
@@ -2033,7 +2034,7 @@ cfiscsi_ioctl_port_create(struct ctl_req *req)
SVPD_ID_TYPE_SCSI_NAME;
desc->length = idlen;
snprintf(desc->identifier, idlen, "%s,t,0x%4.4x",
- target, port->virtual_port);
+ target, port->physical_port);
/* Generate Target ID. */
idlen = strlen(target) + 1;
@@ -2261,6 +2262,9 @@ cfiscsi_target_find_or_create(struct cfiscsi_softc *softc, const char *name,
strlcpy(newct->ct_alias, alias, sizeof(newct->ct_alias));
refcount_init(&newct->ct_refcount, 1);
newct->ct_softc = softc;
+ if (TAILQ_EMPTY(&softc->targets))
+ softc->last_target_id = 0;
+ newct->ct_target_id = ++softc->last_target_id;
TAILQ_INSERT_TAIL(&softc->targets, newct, ct_next);
mtx_unlock(&softc->lock);
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.h b/sys/cam/ctl/ctl_frontend_iscsi.h
index af4de87..1efe245 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.h
+++ b/sys/cam/ctl/ctl_frontend_iscsi.h
@@ -45,6 +45,7 @@ struct cfiscsi_target {
char ct_alias[CTL_ISCSI_ALIAS_LEN];
int ct_state;
int ct_online;
+ int ct_target_id;
struct ctl_port ct_port;
};
@@ -110,6 +111,7 @@ struct cfiscsi_softc {
struct mtx lock;
char port_name[32];
int online;
+ int last_target_id;
unsigned int last_session_id;
TAILQ_HEAD(, cfiscsi_target) targets;
TAILQ_HEAD(, cfiscsi_session) sessions;
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index 6059494..b8b9309 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -400,8 +400,8 @@ ctlfeasync(void *callback_arg, uint32_t code, struct cam_path *path, void *arg)
* frontend structure itself.
*/
port->port_name = softc->port_name;
- port->physical_port = cpi->unit_number;
- port->virtual_port = cpi->bus_id;
+ port->physical_port = cpi->bus_id;
+ port->virtual_port = 0;
port->port_online = ctlfe_online;
port->port_offline = ctlfe_offline;
port->onoff_arg = softc;
OpenPOWER on IntegriCloud