mirror of https://gitee.com/openkylin/linux.git
[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: Mike Christie <michaelc@cs.wisc.edu> Cc: Roland Dreier <rdreier@cisco.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
1d9bf13a9c
commit
0801c242a3
|
@ -576,6 +576,7 @@ static struct iscsi_transport iscsi_iser_transport = {
|
|||
ISCSI_PERSISTENT_ADDRESS |
|
||||
ISCSI_TARGET_NAME |
|
||||
ISCSI_TPGT,
|
||||
.host_param_mask = ISCSI_HOST_HWADDRESS,
|
||||
.host_template = &iscsi_iser_sht,
|
||||
.conndata_size = sizeof(struct iscsi_conn),
|
||||
.max_lun = ISCSI_ISER_MAX_LUN,
|
||||
|
@ -592,6 +593,9 @@ static struct iscsi_transport iscsi_iser_transport = {
|
|||
.get_session_param = iscsi_session_get_param,
|
||||
.start_conn = iscsi_iser_conn_start,
|
||||
.stop_conn = iscsi_conn_stop,
|
||||
/* iscsi host params */
|
||||
.get_host_param = iscsi_host_get_param,
|
||||
.set_host_param = iscsi_host_set_param,
|
||||
/* IO */
|
||||
.send_pdu = iscsi_conn_send_pdu,
|
||||
.get_stats = iscsi_iser_conn_get_stats,
|
||||
|
|
|
@ -2181,6 +2181,7 @@ static struct iscsi_transport iscsi_tcp_transport = {
|
|||
ISCSI_PERSISTENT_ADDRESS |
|
||||
ISCSI_TARGET_NAME |
|
||||
ISCSI_TPGT,
|
||||
.host_param_mask = ISCSI_HOST_HWADDRESS,
|
||||
.host_template = &iscsi_sht,
|
||||
.conndata_size = sizeof(struct iscsi_conn),
|
||||
.max_conn = 1,
|
||||
|
@ -2197,6 +2198,9 @@ static struct iscsi_transport iscsi_tcp_transport = {
|
|||
.get_session_param = iscsi_session_get_param,
|
||||
.start_conn = iscsi_conn_start,
|
||||
.stop_conn = iscsi_tcp_conn_stop,
|
||||
/* iscsi host params */
|
||||
.get_host_param = iscsi_host_get_param,
|
||||
.set_host_param = iscsi_host_set_param,
|
||||
/* IO */
|
||||
.send_pdu = iscsi_conn_send_pdu,
|
||||
.get_stats = iscsi_conn_get_stats,
|
||||
|
|
|
@ -1462,6 +1462,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
|
|||
iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
|
||||
|
||||
kfree(session->targetname);
|
||||
kfree(session->hwaddress);
|
||||
|
||||
iscsi_destroy_session(cls_session);
|
||||
scsi_host_put(shost);
|
||||
|
@ -1990,6 +1991,45 @@ int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
|
|||
}
|
||||
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_DESCRIPTION("iSCSI library functions");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -224,7 +224,8 @@ struct iscsi_session {
|
|||
int erl;
|
||||
int tpgt;
|
||||
char *targetname;
|
||||
|
||||
/* hw address being used for iscsi connection */
|
||||
char *hwaddress;
|
||||
/* control data */
|
||||
struct iscsi_transport *tt;
|
||||
struct Scsi_Host *host;
|
||||
|
@ -255,6 +256,16 @@ extern int iscsi_eh_host_reset(struct scsi_cmnd *sc);
|
|||
extern int iscsi_queuecommand(struct scsi_cmnd *sc,
|
||||
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
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue