Skip to content

Commit

Permalink
[SCSI] iscsi class, qla4xxx, iscsi_tcp, ib_iser: export/set initiator…
Browse files Browse the repository at this point in the history
… name

For iscsi root boot, software iscsi needs to know what the BIOS/OF
initiator used for the initiator name so this puts it in sysfs
for userspace to be able to pick up.

For hw iscsi, it is nice to see what the card is using.

This patch adds the new param, and hooks in qla4xxx, iscsi_tcp, and ib_iser.

Signed-off-by: Mike Christie <[email protected]>
Cc: Roland Dreier <[email protected]>
Cc: David C Somayajulu <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
  • Loading branch information
Mike Christie authored and James Bottomley committed Jun 1, 2007
1 parent 0801c24 commit 8ad5781
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 4 deletions.
3 changes: 2 additions & 1 deletion drivers/infiniband/ulp/iser/iscsi_iser.c
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,8 @@ static struct iscsi_transport iscsi_iser_transport = {
ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME |
ISCSI_TPGT,
.host_param_mask = ISCSI_HOST_HWADDRESS,
.host_param_mask = ISCSI_HOST_HWADDRESS |
ISCSI_HOST_INITIATOR_NAME,
.host_template = &iscsi_iser_sht,
.conndata_size = sizeof(struct iscsi_conn),
.max_lun = ISCSI_ISER_MAX_LUN,
Expand Down
3 changes: 2 additions & 1 deletion drivers/scsi/iscsi_tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2181,7 +2181,8 @@ static struct iscsi_transport iscsi_tcp_transport = {
ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME |
ISCSI_TPGT,
.host_param_mask = ISCSI_HOST_HWADDRESS,
.host_param_mask = ISCSI_HOST_HWADDRESS |
ISCSI_HOST_INITIATOR_NAME,
.host_template = &iscsi_sht,
.conndata_size = sizeof(struct iscsi_conn),
.max_conn = 1,
Expand Down
12 changes: 12 additions & 0 deletions drivers/scsi/libiscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)

kfree(session->targetname);
kfree(session->hwaddress);
kfree(session->initiatorname);

iscsi_destroy_session(cls_session);
scsi_host_put(shost);
Expand Down Expand Up @@ -2004,6 +2005,13 @@ int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
else
len = sprintf(buf, "%s\n", session->hwaddress);
break;
case ISCSI_HOST_PARAM_INITIATOR_NAME:
if (!session->initiatorname)
len = sprintf(buf, "%s\n", "unknown");
else
len = sprintf(buf, "%s\n", session->initiatorname);
break;

default:
return -ENOSYS;
}
Expand All @@ -2022,6 +2030,10 @@ int iscsi_host_set_param(struct Scsi_Host *shost, enum iscsi_host_param param,
if (!session->hwaddress)
session->hwaddress = kstrdup(buf, GFP_KERNEL);
break;
case ISCSI_HOST_PARAM_INITIATOR_NAME:
if (!session->initiatorname)
session->initiatorname = kstrdup(buf, GFP_KERNEL);
break;
default:
return -ENOSYS;
}
Expand Down
6 changes: 5 additions & 1 deletion drivers/scsi/qla4xxx/ql4_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ static struct iscsi_transport qla4xxx_iscsi_transport = {
.name = DRIVER_NAME,
.param_mask = ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS |
ISCSI_TARGET_NAME | ISCSI_TPGT,
.host_param_mask = ISCSI_HOST_HWADDRESS,
.host_param_mask = ISCSI_HOST_HWADDRESS |
ISCSI_HOST_INITIATOR_NAME,
.sessiondata_size = sizeof(struct ddb_entry),
.host_template = &qla4xxx_driver_template,

Expand Down Expand Up @@ -190,6 +191,9 @@ static int qla4xxx_host_get_param(struct Scsi_Host *shost,
case ISCSI_HOST_PARAM_HWADDRESS:
len = format_addr(buf, ha->my_mac, MAC_ADDR_LEN);
break;
case ISCSI_HOST_PARAM_INITIATOR_NAME:
len = sprintf(buf, ha->name_string);
break;
default:
return -ENOSYS;
}
Expand Down
4 changes: 3 additions & 1 deletion drivers/scsi/scsi_transport_iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

#define ISCSI_SESSION_ATTRS 11
#define ISCSI_CONN_ATTRS 11
#define ISCSI_HOST_ATTRS 1
#define ISCSI_HOST_ATTRS 2
#define ISCSI_TRANSPORT_VERSION "2.0-724"

struct iscsi_internal {
Expand Down Expand Up @@ -1253,6 +1253,7 @@ static ISCSI_CLASS_ATTR(host, field, S_IRUGO, show_host_param_##param, \
NULL);

iscsi_host_attr(hwaddress, ISCSI_HOST_PARAM_HWADDRESS);
iscsi_host_attr(initiatorname, ISCSI_HOST_PARAM_INITIATOR_NAME);

#define SETUP_PRIV_SESSION_RD_ATTR(field) \
do { \
Expand Down Expand Up @@ -1389,6 +1390,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
transport_container_register(&priv->t.host_attrs);

SETUP_HOST_RD_ATTR(hwaddress, ISCSI_HOST_HWADDRESS);
SETUP_HOST_RD_ATTR(initiatorname, ISCSI_HOST_INITIATOR_NAME);
BUG_ON(count > ISCSI_HOST_ATTRS);
priv->host_attrs[count] = NULL;
count = 0;
Expand Down
2 changes: 2 additions & 0 deletions include/scsi/iscsi_if.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,10 +259,12 @@ enum iscsi_param {
/* iSCSI HBA params */
enum iscsi_host_param {
ISCSI_HOST_PARAM_HWADDRESS,
ISCSI_HOST_PARAM_INITIATOR_NAME,
ISCSI_HOST_PARAM_MAX,
};

#define ISCSI_HOST_HWADDRESS (1 << ISCSI_HOST_PARAM_HWADDRESS)
#define ISCSI_HOST_INITIATOR_NAME (1 << ISCSI_HOST_PARAM_INITIATOR_NAME)

#define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
#define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
Expand Down
1 change: 1 addition & 0 deletions include/scsi/libiscsi.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ struct iscsi_session {
int erl;
int tpgt;
char *targetname;
char *initiatorname;
/* hw address being used for iscsi connection */
char *hwaddress;
/* control data */
Expand Down

0 comments on commit 8ad5781

Please sign in to comment.