[SCSI] iscsi_transport, qla4xxx: have class lookup host for drivers
We are going to be adding more host level sysfs attrs and set_params, so this patch has them take a scsi_host instead of either a scsi_host or host no. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Cc: David C Somayajulu <david.somayajulu@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
aa1e93a2fe
commit
2174a04ee7
3 changed files with 21 additions and 17 deletions
|
@ -54,8 +54,9 @@ static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha);
|
||||||
/*
|
/*
|
||||||
* iSCSI template entry points
|
* iSCSI template entry points
|
||||||
*/
|
*/
|
||||||
static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
|
static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
|
||||||
uint32_t enable, struct sockaddr *dst_addr);
|
enum iscsi_tgt_dscvr type, uint32_t enable,
|
||||||
|
struct sockaddr *dst_addr);
|
||||||
static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
|
static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
|
||||||
enum iscsi_param param, char *buf);
|
enum iscsi_param param, char *buf);
|
||||||
static int qla4xxx_sess_get_param(struct iscsi_cls_session *sess,
|
static int qla4xxx_sess_get_param(struct iscsi_cls_session *sess,
|
||||||
|
@ -243,21 +244,15 @@ static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
|
static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
|
||||||
uint32_t enable, struct sockaddr *dst_addr)
|
enum iscsi_tgt_dscvr type, uint32_t enable,
|
||||||
|
struct sockaddr *dst_addr)
|
||||||
{
|
{
|
||||||
struct scsi_qla_host *ha;
|
struct scsi_qla_host *ha;
|
||||||
struct Scsi_Host *shost;
|
|
||||||
struct sockaddr_in *addr;
|
struct sockaddr_in *addr;
|
||||||
struct sockaddr_in6 *addr6;
|
struct sockaddr_in6 *addr6;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
shost = scsi_host_lookup(host_no);
|
|
||||||
if (IS_ERR(shost)) {
|
|
||||||
printk(KERN_ERR "Could not find host no %u\n", host_no);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
ha = (struct scsi_qla_host *) shost->hostdata;
|
ha = (struct scsi_qla_host *) shost->hostdata;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -281,8 +276,6 @@ static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
|
||||||
default:
|
default:
|
||||||
ret = -ENOSYS;
|
ret = -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
scsi_host_put(shost);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -945,15 +945,26 @@ static int
|
||||||
iscsi_tgt_dscvr(struct iscsi_transport *transport,
|
iscsi_tgt_dscvr(struct iscsi_transport *transport,
|
||||||
struct iscsi_uevent *ev)
|
struct iscsi_uevent *ev)
|
||||||
{
|
{
|
||||||
|
struct Scsi_Host *shost;
|
||||||
struct sockaddr *dst_addr;
|
struct sockaddr *dst_addr;
|
||||||
|
int err;
|
||||||
|
|
||||||
if (!transport->tgt_dscvr)
|
if (!transport->tgt_dscvr)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
shost = scsi_host_lookup(ev->u.tgt_dscvr.host_no);
|
||||||
|
if (IS_ERR(shost)) {
|
||||||
|
printk(KERN_ERR "target discovery could not find host no %u\n",
|
||||||
|
ev->u.tgt_dscvr.host_no);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev));
|
dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev));
|
||||||
return transport->tgt_dscvr(ev->u.tgt_dscvr.type,
|
err = transport->tgt_dscvr(shost, ev->u.tgt_dscvr.type,
|
||||||
ev->u.tgt_dscvr.host_no,
|
ev->u.tgt_dscvr.enable, dst_addr);
|
||||||
ev->u.tgt_dscvr.enable, dst_addr);
|
scsi_host_put(shost);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -127,7 +127,7 @@ struct iscsi_transport {
|
||||||
uint64_t *ep_handle);
|
uint64_t *ep_handle);
|
||||||
int (*ep_poll) (uint64_t ep_handle, int timeout_ms);
|
int (*ep_poll) (uint64_t ep_handle, int timeout_ms);
|
||||||
void (*ep_disconnect) (uint64_t ep_handle);
|
void (*ep_disconnect) (uint64_t ep_handle);
|
||||||
int (*tgt_dscvr) (enum iscsi_tgt_dscvr type, uint32_t host_no,
|
int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type,
|
||||||
uint32_t enable, struct sockaddr *dst_addr);
|
uint32_t enable, struct sockaddr *dst_addr);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue