Commit 0801c242 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] libiscsi, iscsi_tcp, ib_iser : add sw iscsi host get/set params helpers

iscsid and udev need to key off the hw address being
used so add some helpers for iser and iscsi tcp.

Also convert them
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Cc: Roland Dreier <rdreier@cisco.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 1d9bf13a
...@@ -576,6 +576,7 @@ static struct iscsi_transport iscsi_iser_transport = { ...@@ -576,6 +576,7 @@ static struct iscsi_transport iscsi_iser_transport = {
ISCSI_PERSISTENT_ADDRESS | ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME | ISCSI_TARGET_NAME |
ISCSI_TPGT, ISCSI_TPGT,
.host_param_mask = ISCSI_HOST_HWADDRESS,
.host_template = &iscsi_iser_sht, .host_template = &iscsi_iser_sht,
.conndata_size = sizeof(struct iscsi_conn), .conndata_size = sizeof(struct iscsi_conn),
.max_lun = ISCSI_ISER_MAX_LUN, .max_lun = ISCSI_ISER_MAX_LUN,
...@@ -592,6 +593,9 @@ static struct iscsi_transport iscsi_iser_transport = { ...@@ -592,6 +593,9 @@ static struct iscsi_transport iscsi_iser_transport = {
.get_session_param = iscsi_session_get_param, .get_session_param = iscsi_session_get_param,
.start_conn = iscsi_iser_conn_start, .start_conn = iscsi_iser_conn_start,
.stop_conn = iscsi_conn_stop, .stop_conn = iscsi_conn_stop,
/* iscsi host params */
.get_host_param = iscsi_host_get_param,
.set_host_param = iscsi_host_set_param,
/* IO */ /* IO */
.send_pdu = iscsi_conn_send_pdu, .send_pdu = iscsi_conn_send_pdu,
.get_stats = iscsi_iser_conn_get_stats, .get_stats = iscsi_iser_conn_get_stats,
......
...@@ -2181,6 +2181,7 @@ static struct iscsi_transport iscsi_tcp_transport = { ...@@ -2181,6 +2181,7 @@ static struct iscsi_transport iscsi_tcp_transport = {
ISCSI_PERSISTENT_ADDRESS | ISCSI_PERSISTENT_ADDRESS |
ISCSI_TARGET_NAME | ISCSI_TARGET_NAME |
ISCSI_TPGT, ISCSI_TPGT,
.host_param_mask = ISCSI_HOST_HWADDRESS,
.host_template = &iscsi_sht, .host_template = &iscsi_sht,
.conndata_size = sizeof(struct iscsi_conn), .conndata_size = sizeof(struct iscsi_conn),
.max_conn = 1, .max_conn = 1,
...@@ -2197,6 +2198,9 @@ static struct iscsi_transport iscsi_tcp_transport = { ...@@ -2197,6 +2198,9 @@ static struct iscsi_transport iscsi_tcp_transport = {
.get_session_param = iscsi_session_get_param, .get_session_param = iscsi_session_get_param,
.start_conn = iscsi_conn_start, .start_conn = iscsi_conn_start,
.stop_conn = iscsi_tcp_conn_stop, .stop_conn = iscsi_tcp_conn_stop,
/* iscsi host params */
.get_host_param = iscsi_host_get_param,
.set_host_param = iscsi_host_set_param,
/* IO */ /* IO */
.send_pdu = iscsi_conn_send_pdu, .send_pdu = iscsi_conn_send_pdu,
.get_stats = iscsi_conn_get_stats, .get_stats = iscsi_conn_get_stats,
......
...@@ -1462,6 +1462,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session) ...@@ -1462,6 +1462,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
iscsi_pool_free(&session->cmdpool, (void**)session->cmds); iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
kfree(session->targetname); kfree(session->targetname);
kfree(session->hwaddress);
iscsi_destroy_session(cls_session); iscsi_destroy_session(cls_session);
scsi_host_put(shost); scsi_host_put(shost);
...@@ -1990,6 +1991,45 @@ int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, ...@@ -1990,6 +1991,45 @@ int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
} }
EXPORT_SYMBOL_GPL(iscsi_conn_get_param); EXPORT_SYMBOL_GPL(iscsi_conn_get_param);
int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
char *buf)
{
struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
int len;
switch (param) {
case ISCSI_HOST_PARAM_HWADDRESS:
if (!session->hwaddress)
len = sprintf(buf, "%s\n", "default");
else
len = sprintf(buf, "%s\n", session->hwaddress);
break;
default:
return -ENOSYS;
}
return len;
}
EXPORT_SYMBOL_GPL(iscsi_host_get_param);
int iscsi_host_set_param(struct Scsi_Host *shost, enum iscsi_host_param param,
char *buf, int buflen)
{
struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
switch (param) {
case ISCSI_HOST_PARAM_HWADDRESS:
if (!session->hwaddress)
session->hwaddress = kstrdup(buf, GFP_KERNEL);
break;
default:
return -ENOSYS;
}
return 0;
}
EXPORT_SYMBOL_GPL(iscsi_host_set_param);
MODULE_AUTHOR("Mike Christie"); MODULE_AUTHOR("Mike Christie");
MODULE_DESCRIPTION("iSCSI library functions"); MODULE_DESCRIPTION("iSCSI library functions");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -224,7 +224,8 @@ struct iscsi_session { ...@@ -224,7 +224,8 @@ struct iscsi_session {
int erl; int erl;
int tpgt; int tpgt;
char *targetname; char *targetname;
/* hw address being used for iscsi connection */
char *hwaddress;
/* control data */ /* control data */
struct iscsi_transport *tt; struct iscsi_transport *tt;
struct Scsi_Host *host; struct Scsi_Host *host;
...@@ -255,6 +256,16 @@ extern int iscsi_eh_host_reset(struct scsi_cmnd *sc); ...@@ -255,6 +256,16 @@ extern int iscsi_eh_host_reset(struct scsi_cmnd *sc);
extern int iscsi_queuecommand(struct scsi_cmnd *sc, extern int iscsi_queuecommand(struct scsi_cmnd *sc,
void (*done)(struct scsi_cmnd *)); void (*done)(struct scsi_cmnd *));
/*
* iSCSI host helpers.
*/
extern int iscsi_host_set_param(struct Scsi_Host *shost,
enum iscsi_host_param param, char *buf,
int buflen);
extern int iscsi_host_get_param(struct Scsi_Host *shost,
enum iscsi_host_param param, char *buf);
/* /*
* session management * session management
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment