[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:
Mike Christie 2007-05-30 12:57:10 -05:00 committed by James Bottomley
parent aa1e93a2fe
commit 2174a04ee7
3 changed files with 21 additions and 17 deletions

View file

@ -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;
} }

View file

@ -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

View file

@ -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);
}; };