Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2174a04e authored by Mike Christie's avatar Mike Christie Committed by James Bottomley
Browse files

[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: default avatarMike Christie <michaelc@cs.wisc.edu>
Cc: David C Somayajulu <david.somayajulu@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent aa1e93a2
Loading
Loading
Loading
Loading
+6 −13
Original line number Diff line number Diff line
@@ -54,8 +54,9 @@ static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha);
/*
 * iSCSI template entry points
 */
static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
			     uint32_t enable, struct sockaddr *dst_addr);
static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
			     enum iscsi_tgt_dscvr type, uint32_t enable,
			     struct sockaddr *dst_addr);
static int qla4xxx_conn_get_param(struct iscsi_cls_conn *conn,
				  enum iscsi_param param, char *buf);
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;
}

static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
			     uint32_t enable, struct sockaddr *dst_addr)
static int qla4xxx_tgt_dscvr(struct Scsi_Host *shost,
			     enum iscsi_tgt_dscvr type, uint32_t enable,
			     struct sockaddr *dst_addr)
{
	struct scsi_qla_host *ha;
	struct Scsi_Host *shost;
	struct sockaddr_in *addr;
	struct sockaddr_in6 *addr6;
	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;

	switch (type) {
@@ -281,8 +276,6 @@ static int qla4xxx_tgt_dscvr(enum iscsi_tgt_dscvr type, uint32_t host_no,
	default:
		ret = -ENOSYS;
	}

	scsi_host_put(shost);
	return ret;
}

+14 −3
Original line number Diff line number Diff line
@@ -945,15 +945,26 @@ static int
iscsi_tgt_dscvr(struct iscsi_transport *transport,
		struct iscsi_uevent *ev)
{
	struct Scsi_Host *shost;
	struct sockaddr *dst_addr;
	int err;

	if (!transport->tgt_dscvr)
		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));
	return transport->tgt_dscvr(ev->u.tgt_dscvr.type,
				    ev->u.tgt_dscvr.host_no,
	err = transport->tgt_dscvr(shost, ev->u.tgt_dscvr.type,
				   ev->u.tgt_dscvr.enable, dst_addr);
	scsi_host_put(shost);
	return err;
}

static int
+1 −1
Original line number Diff line number Diff line
@@ -127,7 +127,7 @@ struct iscsi_transport {
			   uint64_t *ep_handle);
	int (*ep_poll) (uint64_t ep_handle, int timeout_ms);
	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);
};