Commit 25ff6af1 authored by Joe Carnuccio's avatar Joe Carnuccio Committed by Nicholas Bellinger

qla2xxx: Simplify usage of SRB structure in driver

This patch simplifies SRB structure usage in driver.

- Simplify sp->done() and sp->free() interfaces.
- Remove sp->fcport->vha to use vha pointer from sp.
- Use sp->vha context in qla2x00_rel_sp().
Signed-off-by: default avatarJoe Carnuccio <joe.carnuccio@cavium.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 41dc529a
...@@ -13,28 +13,25 @@ ...@@ -13,28 +13,25 @@
/* BSG support for ELS/CT pass through */ /* BSG support for ELS/CT pass through */
void void
qla2x00_bsg_job_done(void *data, void *ptr, int res) qla2x00_bsg_job_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
struct bsg_job *bsg_job = sp->u.bsg_job; struct bsg_job *bsg_job = sp->u.bsg_job;
struct fc_bsg_reply *bsg_reply = bsg_job->reply; struct fc_bsg_reply *bsg_reply = bsg_job->reply;
bsg_reply->result = res; bsg_reply->result = res;
bsg_job_done(bsg_job, bsg_reply->result, bsg_job_done(bsg_job, bsg_reply->result,
bsg_reply->reply_payload_rcv_len); bsg_reply->reply_payload_rcv_len);
sp->free(vha, sp); sp->free(sp);
} }
void void
qla2x00_bsg_sp_free(void *data, void *ptr) qla2x00_bsg_sp_free(void *ptr)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct scsi_qla_host *vha = sp->fcport->vha; struct qla_hw_data *ha = sp->vha->hw;
struct bsg_job *bsg_job = sp->u.bsg_job; struct bsg_job *bsg_job = sp->u.bsg_job;
struct fc_bsg_request *bsg_request = bsg_job->request; struct fc_bsg_request *bsg_request = bsg_job->request;
struct qla_hw_data *ha = vha->hw;
struct qla_mt_iocb_rqst_fx00 *piocb_rqst; struct qla_mt_iocb_rqst_fx00 *piocb_rqst;
if (sp->type == SRB_FXIOCB_BCMD) { if (sp->type == SRB_FXIOCB_BCMD) {
...@@ -62,7 +59,7 @@ qla2x00_bsg_sp_free(void *data, void *ptr) ...@@ -62,7 +59,7 @@ qla2x00_bsg_sp_free(void *data, void *ptr)
sp->type == SRB_FXIOCB_BCMD || sp->type == SRB_FXIOCB_BCMD ||
sp->type == SRB_ELS_CMD_HST) sp->type == SRB_ELS_CMD_HST)
kfree(sp->fcport); kfree(sp->fcport);
qla2x00_rel_sp(vha, sp); qla2x00_rel_sp(sp);
} }
int int
...@@ -394,7 +391,7 @@ qla2x00_process_els(struct bsg_job *bsg_job) ...@@ -394,7 +391,7 @@ qla2x00_process_els(struct bsg_job *bsg_job)
if (rval != QLA_SUCCESS) { if (rval != QLA_SUCCESS) {
ql_log(ql_log_warn, vha, 0x700e, ql_log(ql_log_warn, vha, 0x700e,
"qla2x00_start_sp failed = %d\n", rval); "qla2x00_start_sp failed = %d\n", rval);
qla2x00_rel_sp(vha, sp); qla2x00_rel_sp(sp);
rval = -EIO; rval = -EIO;
goto done_unmap_sg; goto done_unmap_sg;
} }
...@@ -542,7 +539,7 @@ qla2x00_process_ct(struct bsg_job *bsg_job) ...@@ -542,7 +539,7 @@ qla2x00_process_ct(struct bsg_job *bsg_job)
if (rval != QLA_SUCCESS) { if (rval != QLA_SUCCESS) {
ql_log(ql_log_warn, vha, 0x7017, ql_log(ql_log_warn, vha, 0x7017,
"qla2x00_start_sp failed=%d.\n", rval); "qla2x00_start_sp failed=%d.\n", rval);
qla2x00_rel_sp(vha, sp); qla2x00_rel_sp(sp);
rval = -EIO; rval = -EIO;
goto done_free_fcport; goto done_free_fcport;
} }
...@@ -2578,6 +2575,6 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job) ...@@ -2578,6 +2575,6 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job)
done: done:
spin_unlock_irqrestore(&ha->hardware_lock, flags); spin_unlock_irqrestore(&ha->hardware_lock, flags);
sp->free(vha, sp); sp->free(sp);
return 0; return 0;
} }
...@@ -433,7 +433,7 @@ struct srb_iocb { ...@@ -433,7 +433,7 @@ struct srb_iocb {
typedef struct srb { typedef struct srb {
atomic_t ref_count; atomic_t ref_count;
struct fc_port *fcport; struct fc_port *fcport;
void *vha; struct scsi_qla_host *vha;
uint32_t handle; uint32_t handle;
uint16_t flags; uint16_t flags;
uint16_t type; uint16_t type;
...@@ -447,8 +447,8 @@ typedef struct srb { ...@@ -447,8 +447,8 @@ typedef struct srb {
struct bsg_job *bsg_job; struct bsg_job *bsg_job;
struct srb_cmd scmd; struct srb_cmd scmd;
} u; } u;
void (*done)(void *, void *, int); void (*done)(void *, int);
void (*free)(void *, void *); void (*free)(void *);
} srb_t; } srb_t;
#define GET_CMD_SP(sp) (sp->u.scmd.cmd) #define GET_CMD_SP(sp) (sp->u.scmd.cmd)
...@@ -3224,6 +3224,7 @@ struct qla_qpair { ...@@ -3224,6 +3224,7 @@ struct qla_qpair {
struct qla_hw_data *hw; struct qla_hw_data *hw;
struct work_struct q_work; struct work_struct q_work;
struct list_head qp_list_elem; /* vha->qp_list */ struct list_head qp_list_elem; /* vha->qp_list */
struct scsi_qla_host *vha;
}; };
/* Place holder for FW buffer parameters */ /* Place holder for FW buffer parameters */
......
...@@ -186,9 +186,9 @@ extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32); ...@@ -186,9 +186,9 @@ extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32); extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
extern void qla2x00_disable_board_on_pci_error(struct work_struct *); extern void qla2x00_disable_board_on_pci_error(struct work_struct *);
extern void qla2x00_sp_compl(void *, void *, int); extern void qla2x00_sp_compl(void *, int);
extern void qla2xxx_qpair_sp_free_dma(void *, void *); extern void qla2xxx_qpair_sp_free_dma(void *);
extern void qla2xxx_qpair_sp_compl(void *, void *, int); extern void qla2xxx_qpair_sp_compl(void *, int);
extern int qla24xx_post_upd_fcport_work(struct scsi_qla_host *, fc_port_t *); extern int qla24xx_post_upd_fcport_work(struct scsi_qla_host *, fc_port_t *);
void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *, void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *,
uint16_t *); uint16_t *);
...@@ -215,7 +215,7 @@ extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *); ...@@ -215,7 +215,7 @@ extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *);
extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *); extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *);
extern scsi_qla_host_t * qla24xx_create_vhost(struct fc_vport *); extern scsi_qla_host_t * qla24xx_create_vhost(struct fc_vport *);
extern void qla2x00_sp_free_dma(void *, void *); extern void qla2x00_sp_free_dma(void *);
extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *); extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);
extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int); extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int);
...@@ -733,10 +733,10 @@ extern int qla82xx_restart_isp(scsi_qla_host_t *); ...@@ -733,10 +733,10 @@ extern int qla82xx_restart_isp(scsi_qla_host_t *);
/* IOCB related functions */ /* IOCB related functions */
extern int qla82xx_start_scsi(srb_t *); extern int qla82xx_start_scsi(srb_t *);
extern void qla2x00_sp_free(void *, void *); extern void qla2x00_sp_free(void *);
extern void qla2x00_sp_timeout(unsigned long); extern void qla2x00_sp_timeout(unsigned long);
extern void qla2x00_bsg_job_done(void *, void *, int); extern void qla2x00_bsg_job_done(void *, int);
extern void qla2x00_bsg_sp_free(void *, void *); extern void qla2x00_bsg_sp_free(void *);
extern void qla2x00_start_iocbs(struct scsi_qla_host *, struct req_que *); extern void qla2x00_start_iocbs(struct scsi_qla_host *, struct req_que *);
/* Interrupt related */ /* Interrupt related */
......
...@@ -2822,10 +2822,10 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea) ...@@ -2822,10 +2822,10 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
} }
} /* gidpn_event */ } /* gidpn_event */
static void qla2x00_async_gidpn_sp_done(void *v, void *s, int res) static void qla2x00_async_gidpn_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v; struct srb *sp = s;
struct srb *sp = (struct srb *)s; struct scsi_qla_host *vha = sp->vha;
fc_port_t *fcport = sp->fcport; fc_port_t *fcport = sp->fcport;
u8 *id = fcport->ct_desc.ct_sns->p.rsp.rsp.gid_pn.port_id; u8 *id = fcport->ct_desc.ct_sns->p.rsp.rsp.gid_pn.port_id;
struct event_arg ea; struct event_arg ea;
...@@ -2847,7 +2847,7 @@ static void qla2x00_async_gidpn_sp_done(void *v, void *s, int res) ...@@ -2847,7 +2847,7 @@ static void qla2x00_async_gidpn_sp_done(void *v, void *s, int res)
qla2x00_fcport_event_handler(vha, &ea); qla2x00_fcport_event_handler(vha, &ea);
sp->free(vha, sp); sp->free(sp);
} }
int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport) int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport)
...@@ -2905,7 +2905,7 @@ int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport) ...@@ -2905,7 +2905,7 @@ int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport)
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
...@@ -2941,11 +2941,11 @@ int qla24xx_post_gpsc_work(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -2941,11 +2941,11 @@ int qla24xx_post_gpsc_work(struct scsi_qla_host *vha, fc_port_t *fcport)
return qla2x00_post_work(vha, e); return qla2x00_post_work(vha, e);
} }
static void qla24xx_async_gpsc_sp_done(void *v, void *s, int res) static void qla24xx_async_gpsc_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v; struct srb *sp = s;
struct scsi_qla_host *vha = sp->vha;
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
struct srb *sp = (struct srb *)s;
fc_port_t *fcport = sp->fcport; fc_port_t *fcport = sp->fcport;
struct ct_sns_rsp *ct_rsp; struct ct_sns_rsp *ct_rsp;
struct event_arg ea; struct event_arg ea;
...@@ -3011,7 +3011,7 @@ static void qla24xx_async_gpsc_sp_done(void *v, void *s, int res) ...@@ -3011,7 +3011,7 @@ static void qla24xx_async_gpsc_sp_done(void *v, void *s, int res)
ea.fcport = fcport; ea.fcport = fcport;
qla2x00_fcport_event_handler(vha, &ea); qla2x00_fcport_event_handler(vha, &ea);
sp->free(vha, sp); sp->free(sp);
} }
int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport) int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport)
...@@ -3066,7 +3066,7 @@ int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport) ...@@ -3066,7 +3066,7 @@ int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport)
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
...@@ -3104,7 +3104,7 @@ void qla24xx_async_gpnid_done(scsi_qla_host_t *vha, srb_t *sp) ...@@ -3104,7 +3104,7 @@ void qla24xx_async_gpnid_done(scsi_qla_host_t *vha, srb_t *sp)
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
} }
sp->free(vha, sp); sp->free(sp);
} }
void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea) void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
...@@ -3138,10 +3138,10 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea) ...@@ -3138,10 +3138,10 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
} }
} }
static void qla2x00_async_gpnid_sp_done(void *v, void *s, int res) static void qla2x00_async_gpnid_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v; struct srb *sp = s;
struct srb *sp = (struct srb *)s; struct scsi_qla_host *vha = sp->vha;
struct ct_sns_req *ct_req = struct ct_sns_req *ct_req =
(struct ct_sns_req *)sp->u.iocb_cmd.u.ctarg.req; (struct ct_sns_req *)sp->u.iocb_cmd.u.ctarg.req;
struct ct_sns_rsp *ct_rsp = struct ct_sns_rsp *ct_rsp =
...@@ -3183,7 +3183,7 @@ static void qla2x00_async_gpnid_sp_done(void *v, void *s, int res) ...@@ -3183,7 +3183,7 @@ static void qla2x00_async_gpnid_sp_done(void *v, void *s, int res)
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
} }
sp->free(vha, sp); sp->free(sp);
return; return;
} }
...@@ -3272,7 +3272,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id) ...@@ -3272,7 +3272,7 @@ int qla24xx_async_gpnid(scsi_qla_host_t *vha, port_id_t *id)
sp->u.iocb_cmd.u.ctarg.rsp = NULL; sp->u.iocb_cmd.u.ctarg.rsp = NULL;
} }
sp->free(vha, sp); sp->free(sp);
done: done:
return rval; return rval;
} }
...@@ -47,29 +47,27 @@ qla2x00_sp_timeout(unsigned long __data) ...@@ -47,29 +47,27 @@ qla2x00_sp_timeout(unsigned long __data)
{ {
srb_t *sp = (srb_t *)__data; srb_t *sp = (srb_t *)__data;
struct srb_iocb *iocb; struct srb_iocb *iocb;
scsi_qla_host_t *vha = (scsi_qla_host_t *)sp->vha; scsi_qla_host_t *vha = sp->vha;
struct qla_hw_data *ha = vha->hw;
struct req_que *req; struct req_que *req;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&ha->hardware_lock, flags); spin_lock_irqsave(&vha->hw->hardware_lock, flags);
req = ha->req_q_map[0]; req = vha->hw->req_q_map[0];
req->outstanding_cmds[sp->handle] = NULL; req->outstanding_cmds[sp->handle] = NULL;
iocb = &sp->u.iocb_cmd; iocb = &sp->u.iocb_cmd;
iocb->timeout(sp); iocb->timeout(sp);
sp->free(vha, sp); sp->free(sp);
spin_unlock_irqrestore(&ha->hardware_lock, flags); spin_unlock_irqrestore(&vha->hw->hardware_lock, flags);
} }
void void
qla2x00_sp_free(void *data, void *ptr) qla2x00_sp_free(void *ptr)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct srb_iocb *iocb = &sp->u.iocb_cmd; struct srb_iocb *iocb = &sp->u.iocb_cmd;
struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
del_timer(&iocb->timer); del_timer(&iocb->timer);
qla2x00_rel_sp(vha, sp); qla2x00_rel_sp(sp);
} }
/* Asynchronous Login/Logout Routines -------------------------------------- */ /* Asynchronous Login/Logout Routines -------------------------------------- */
...@@ -97,7 +95,7 @@ qla2x00_get_async_timeout(struct scsi_qla_host *vha) ...@@ -97,7 +95,7 @@ qla2x00_get_async_timeout(struct scsi_qla_host *vha)
void void
qla2x00_async_iocb_timeout(void *data) qla2x00_async_iocb_timeout(void *data)
{ {
srb_t *sp = (srb_t *)data; srb_t *sp = data;
fc_port_t *fcport = sp->fcport; fc_port_t *fcport = sp->fcport;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
struct event_arg ea; struct event_arg ea;
...@@ -130,22 +128,21 @@ qla2x00_async_iocb_timeout(void *data) ...@@ -130,22 +128,21 @@ qla2x00_async_iocb_timeout(void *data)
case SRB_NACK_PLOGI: case SRB_NACK_PLOGI:
case SRB_NACK_PRLI: case SRB_NACK_PRLI:
case SRB_NACK_LOGO: case SRB_NACK_LOGO:
sp->done(sp->vha, sp, QLA_FUNCTION_TIMEOUT); sp->done(sp, QLA_FUNCTION_TIMEOUT);
break; break;
} }
} }
static void static void
qla2x00_async_login_sp_done(void *data, void *ptr, int res) qla2x00_async_login_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct scsi_qla_host *vha = sp->vha;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
struct event_arg ea; struct event_arg ea;
ql_dbg(ql_dbg_disc, vha, 0xffff, ql_dbg(ql_dbg_disc, vha, 0xffff,
"%s %8phC res %d \n", "%s %8phC res %d \n", __func__, sp->fcport->port_name, res);
__func__, sp->fcport->port_name, res);
sp->fcport->flags &= ~FCF_ASYNC_SENT; sp->fcport->flags &= ~FCF_ASYNC_SENT;
if (!test_bit(UNLOADING, &vha->dpc_flags)) { if (!test_bit(UNLOADING, &vha->dpc_flags)) {
...@@ -160,7 +157,7 @@ qla2x00_async_login_sp_done(void *data, void *ptr, int res) ...@@ -160,7 +157,7 @@ qla2x00_async_login_sp_done(void *data, void *ptr, int res)
qla2x00_fcport_event_handler(vha, &ea); qla2x00_fcport_event_handler(vha, &ea);
} }
sp->free(sp->fcport->vha, sp); sp->free(sp);
} }
int int
...@@ -212,24 +209,23 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, ...@@ -212,24 +209,23 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(fcport->vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
} }
static void static void
qla2x00_async_logout_sp_done(void *data, void *ptr, int res) qla2x00_async_logout_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
sp->fcport->flags &= ~FCF_ASYNC_SENT; sp->fcport->flags &= ~FCF_ASYNC_SENT;
if (!test_bit(UNLOADING, &vha->dpc_flags)) if (!test_bit(UNLOADING, &sp->vha->dpc_flags))
qla2x00_post_async_logout_done_work(sp->fcport->vha, sp->fcport, qla2x00_post_async_logout_done_work(sp->vha, sp->fcport,
lio->u.logio.data); lio->u.logio.data);
sp->free(sp->fcport->vha, sp); sp->free(sp);
} }
int int
...@@ -264,23 +260,23 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -264,23 +260,23 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(fcport->vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
} }
static void static void
qla2x00_async_adisc_sp_done(void *data, void *ptr, int res) qla2x00_async_adisc_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct scsi_qla_host *vha = sp->vha;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
if (!test_bit(UNLOADING, &vha->dpc_flags)) if (!test_bit(UNLOADING, &vha->dpc_flags))
qla2x00_post_async_adisc_done_work(sp->fcport->vha, sp->fcport, qla2x00_post_async_adisc_done_work(sp->vha, sp->fcport,
lio->u.logio.data); lio->u.logio.data);
sp->free(sp->fcport->vha, sp); sp->free(sp);
} }
int int
...@@ -317,7 +313,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, ...@@ -317,7 +313,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(fcport->vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
...@@ -479,10 +475,10 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, ...@@ -479,10 +475,10 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
} /* gnl_event */ } /* gnl_event */
static void static void
qla24xx_async_gnl_sp_done(void *v, void *s, int res) qla24xx_async_gnl_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v; struct srb *sp = s;
struct srb *sp = (struct srb *)s; struct scsi_qla_host *vha = sp->vha;
unsigned long flags; unsigned long flags;
struct fc_port *fcport = NULL, *tf; struct fc_port *fcport = NULL, *tf;
u16 i, n = 0, loop_id; u16 i, n = 0, loop_id;
...@@ -541,7 +537,7 @@ qla24xx_async_gnl_sp_done(void *v, void *s, int res) ...@@ -541,7 +537,7 @@ qla24xx_async_gnl_sp_done(void *v, void *s, int res)
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
sp->free(vha, sp); sp->free(sp);
} }
int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport) int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
...@@ -609,7 +605,7 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -609,7 +605,7 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(fcport->vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
...@@ -628,10 +624,10 @@ int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -628,10 +624,10 @@ int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport)
} }
static static
void qla24xx_async_gpdb_sp_done(void *v, void *s, int res) void qla24xx_async_gpdb_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v; struct srb *sp = s;
struct srb *sp = (struct srb *)s; struct scsi_qla_host *vha = sp->vha;
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
uint64_t zero = 0; uint64_t zero = 0;
struct port_database_24xx *pd; struct port_database_24xx *pd;
...@@ -708,7 +704,7 @@ void qla24xx_async_gpdb_sp_done(void *v, void *s, int res) ...@@ -708,7 +704,7 @@ void qla24xx_async_gpdb_sp_done(void *v, void *s, int res)
dma_pool_free(ha->s_dma_pool, sp->u.iocb_cmd.u.mbx.in, dma_pool_free(ha->s_dma_pool, sp->u.iocb_cmd.u.mbx.in,
sp->u.iocb_cmd.u.mbx.in_dma); sp->u.iocb_cmd.u.mbx.in_dma);
sp->free(vha, sp); sp->free(sp);
} }
static int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport, static int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport,
...@@ -790,7 +786,7 @@ int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt) ...@@ -790,7 +786,7 @@ int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
if (pd) if (pd)
dma_pool_free(ha->s_dma_pool, pd, pd_dma); dma_pool_free(ha->s_dma_pool, pd, pd_dma);
sp->free(vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
qla24xx_post_gpdb_work(vha, fcport, opt); qla24xx_post_gpdb_work(vha, fcport, opt);
...@@ -1168,7 +1164,7 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea) ...@@ -1168,7 +1164,7 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
static void static void
qla2x00_tmf_iocb_timeout(void *data) qla2x00_tmf_iocb_timeout(void *data)
{ {
srb_t *sp = (srb_t *)data; srb_t *sp = data;
struct srb_iocb *tmf = &sp->u.iocb_cmd; struct srb_iocb *tmf = &sp->u.iocb_cmd;
tmf->u.tmf.comp_status = CS_TIMEOUT; tmf->u.tmf.comp_status = CS_TIMEOUT;
...@@ -1176,10 +1172,11 @@ qla2x00_tmf_iocb_timeout(void *data) ...@@ -1176,10 +1172,11 @@ qla2x00_tmf_iocb_timeout(void *data)
} }
static void static void
qla2x00_tmf_sp_done(void *data, void *ptr, int res) qla2x00_tmf_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct srb_iocb *tmf = &sp->u.iocb_cmd; struct srb_iocb *tmf = &sp->u.iocb_cmd;
complete(&tmf->u.tmf.comp); complete(&tmf->u.tmf.comp);
} }
...@@ -1237,7 +1234,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun, ...@@ -1237,7 +1234,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,
} }
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
return rval; return rval;
} }
...@@ -1245,7 +1242,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun, ...@@ -1245,7 +1242,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,
static void static void
qla24xx_abort_iocb_timeout(void *data) qla24xx_abort_iocb_timeout(void *data)
{ {
srb_t *sp = (srb_t *)data; srb_t *sp = data;
struct srb_iocb *abt = &sp->u.iocb_cmd; struct srb_iocb *abt = &sp->u.iocb_cmd;
abt->u.abt.comp_status = CS_TIMEOUT; abt->u.abt.comp_status = CS_TIMEOUT;
...@@ -1253,9 +1250,9 @@ qla24xx_abort_iocb_timeout(void *data) ...@@ -1253,9 +1250,9 @@ qla24xx_abort_iocb_timeout(void *data)
} }
static void static void
qla24xx_abort_sp_done(void *data, void *ptr, int res) qla24xx_abort_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct srb_iocb *abt = &sp->u.iocb_cmd; struct srb_iocb *abt = &sp->u.iocb_cmd;
complete(&abt->u.abt.comp); complete(&abt->u.abt.comp);
...@@ -1264,7 +1261,7 @@ qla24xx_abort_sp_done(void *data, void *ptr, int res) ...@@ -1264,7 +1261,7 @@ qla24xx_abort_sp_done(void *data, void *ptr, int res)
static int static int
qla24xx_async_abort_cmd(srb_t *cmd_sp) qla24xx_async_abort_cmd(srb_t *cmd_sp)
{ {
scsi_qla_host_t *vha = cmd_sp->fcport->vha; scsi_qla_host_t *vha = cmd_sp->vha;
fc_port_t *fcport = cmd_sp->fcport; fc_port_t *fcport = cmd_sp->fcport;
struct srb_iocb *abt_iocb; struct srb_iocb *abt_iocb;
srb_t *sp; srb_t *sp;
...@@ -1297,7 +1294,7 @@ qla24xx_async_abort_cmd(srb_t *cmd_sp) ...@@ -1297,7 +1294,7 @@ qla24xx_async_abort_cmd(srb_t *cmd_sp)
QLA_SUCCESS : QLA_FUNCTION_FAILED; QLA_SUCCESS : QLA_FUNCTION_FAILED;
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
return rval; return rval;
} }
...@@ -7564,6 +7561,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v ...@@ -7564,6 +7561,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v
memset(qpair, 0, sizeof(struct qla_qpair)); memset(qpair, 0, sizeof(struct qla_qpair));
qpair->hw = vha->hw; qpair->hw = vha->hw;
qpair->vha = vha;
/* Assign available que pair id */ /* Assign available que pair id */
mutex_lock(&ha->mq_lock); mutex_lock(&ha->mq_lock);
......
...@@ -232,6 +232,7 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag) ...@@ -232,6 +232,7 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag)
memset(sp, 0, sizeof(*sp)); memset(sp, 0, sizeof(*sp));
sp->fcport = fcport; sp->fcport = fcport;
sp->iocbs = 1; sp->iocbs = 1;
sp->vha = qpair->vha;
done: done:
if (!sp) if (!sp)
QLA_QPAIR_MARK_NOT_BUSY(qpair); QLA_QPAIR_MARK_NOT_BUSY(qpair);
...@@ -249,14 +250,13 @@ static inline srb_t * ...@@ -249,14 +250,13 @@ static inline srb_t *
qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag) qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag)
{ {
srb_t *sp = NULL; srb_t *sp = NULL;
struct qla_hw_data *ha = vha->hw;
uint8_t bail; uint8_t bail;
QLA_VHA_MARK_BUSY(vha, bail); QLA_VHA_MARK_BUSY(vha, bail);
if (unlikely(bail)) if (unlikely(bail))
return NULL; return NULL;
sp = mempool_alloc(ha->srb_mempool, flag); sp = mempool_alloc(vha->hw->srb_mempool, flag);
if (!sp) if (!sp)
goto done; goto done;
...@@ -271,10 +271,10 @@ qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag) ...@@ -271,10 +271,10 @@ qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag)
} }
static inline void static inline void
qla2x00_rel_sp(scsi_qla_host_t *vha, srb_t *sp) qla2x00_rel_sp(srb_t *sp)
{ {
mempool_free(sp, vha->hw->srb_mempool); QLA_VHA_MARK_NOT_BUSY(sp->vha);
QLA_VHA_MARK_NOT_BUSY(vha); mempool_free(sp, sp->vha->hw->srb_mempool);
} }
static inline void static inline void
...@@ -286,8 +286,7 @@ qla2x00_init_timer(srb_t *sp, unsigned long tmo) ...@@ -286,8 +286,7 @@ qla2x00_init_timer(srb_t *sp, unsigned long tmo)
sp->u.iocb_cmd.timer.function = qla2x00_sp_timeout; sp->u.iocb_cmd.timer.function = qla2x00_sp_timeout;
add_timer(&sp->u.iocb_cmd.timer); add_timer(&sp->u.iocb_cmd.timer);
sp->free = qla2x00_sp_free; sp->free = qla2x00_sp_free;
if ((IS_QLAFX00(((scsi_qla_host_t *)sp->vha)->hw)) && if (IS_QLAFX00(sp->vha->hw) && (sp->type == SRB_FXIOCB_DCMD))
(sp->type == SRB_FXIOCB_DCMD))
init_completion(&sp->u.iocb_cmd.u.fxiocb.fxiocb_comp); init_completion(&sp->u.iocb_cmd.u.fxiocb.fxiocb_comp);
if (sp->type == SRB_ELS_DCMD) if (sp->type == SRB_ELS_DCMD)
init_completion(&sp->u.iocb_cmd.u.els_logo.comp); init_completion(&sp->u.iocb_cmd.u.els_logo.comp);
......
This diff is collapsed.
...@@ -1241,7 +1241,7 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha, ...@@ -1241,7 +1241,7 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha,
req->outstanding_cmds[index] = NULL; req->outstanding_cmds[index] = NULL;
/* Save ISP completion status */ /* Save ISP completion status */
sp->done(vha, sp, DID_OK << 16); sp->done(sp, DID_OK << 16);
} else { } else {
ql_log(ql_log_warn, vha, 0x3016, "Invalid SCSI SRB.\n"); ql_log(ql_log_warn, vha, 0x3016, "Invalid SCSI SRB.\n");
...@@ -1373,7 +1373,7 @@ qla2x00_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1373,7 +1373,7 @@ qla2x00_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
le16_to_cpu(mbx->mb7)); le16_to_cpu(mbx->mb7));
logio_done: logio_done:
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
static void static void
...@@ -1398,7 +1398,7 @@ qla24xx_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1398,7 +1398,7 @@ qla24xx_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
res = (si->u.mbx.in_mb[0] & MBS_MASK); res = (si->u.mbx.in_mb[0] & MBS_MASK);
sp->done(vha, sp, res); sp->done(sp, res);
} }
static void static void
...@@ -1416,7 +1416,7 @@ qla24xxx_nack_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1416,7 +1416,7 @@ qla24xxx_nack_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
if (pkt->u.isp2x.status != cpu_to_le16(NOTIFY_ACK_SUCCESS)) if (pkt->u.isp2x.status != cpu_to_le16(NOTIFY_ACK_SUCCESS))
res = QLA_FUNCTION_FAILED; res = QLA_FUNCTION_FAILED;
sp->done(vha, sp, res); sp->done(sp, res);
} }
static void static void
...@@ -1488,7 +1488,7 @@ qla2x00_ct_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1488,7 +1488,7 @@ qla2x00_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
break; break;
} }
sp->done(vha, sp, res); sp->done(sp, res);
} }
static void static void
...@@ -1524,7 +1524,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1524,7 +1524,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
type = "Driver ELS logo"; type = "Driver ELS logo";
ql_dbg(ql_dbg_user, vha, 0x5047, ql_dbg(ql_dbg_user, vha, 0x5047,
"Completing %s: (%p) type=%d.\n", type, sp, sp->type); "Completing %s: (%p) type=%d.\n", type, sp, sp->type);
sp->done(vha, sp, 0); sp->done(sp, 0);
return; return;
case SRB_CT_PTHRU_CMD: case SRB_CT_PTHRU_CMD:
/* borrowing sts_entry_24xx.comp_status. /* borrowing sts_entry_24xx.comp_status.
...@@ -1533,7 +1533,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1533,7 +1533,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
res = qla2x00_chk_ms_status(vha, (ms_iocb_entry_t *)pkt, res = qla2x00_chk_ms_status(vha, (ms_iocb_entry_t *)pkt,
(struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp, (struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp,
sp->name); sp->name);
sp->done(vha, sp, res); sp->done(sp, res);
return; return;
default: default:
ql_dbg(ql_dbg_user, vha, 0x503e, ql_dbg(ql_dbg_user, vha, 0x503e,
...@@ -1589,7 +1589,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1589,7 +1589,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
bsg_job->reply_len = 0; bsg_job->reply_len = 0;
} }
sp->done(vha, sp, res); sp->done(sp, res);
} }
static void static void
...@@ -1701,7 +1701,7 @@ qla24xx_logio_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -1701,7 +1701,7 @@ qla24xx_logio_entry(scsi_qla_host_t *vha, struct req_que *req,
le32_to_cpu(logio->io_parameter[1])); le32_to_cpu(logio->io_parameter[1]));
logio_done: logio_done:
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
static void static void
...@@ -1751,7 +1751,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk) ...@@ -1751,7 +1751,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
ql_dump_buffer(ql_dbg_async + ql_dbg_buffer, vha, 0x5055, ql_dump_buffer(ql_dbg_async + ql_dbg_buffer, vha, 0x5055,
(uint8_t *)sts, sizeof(*sts)); (uint8_t *)sts, sizeof(*sts));
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
/** /**
...@@ -1839,7 +1839,7 @@ static inline void ...@@ -1839,7 +1839,7 @@ static inline void
qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
uint32_t sense_len, struct rsp_que *rsp, int res) uint32_t sense_len, struct rsp_que *rsp, int res)
{ {
struct scsi_qla_host *vha = sp->fcport->vha; struct scsi_qla_host *vha = sp->vha;
struct scsi_cmnd *cp = GET_CMD_SP(sp); struct scsi_cmnd *cp = GET_CMD_SP(sp);
uint32_t track_sense_len; uint32_t track_sense_len;
...@@ -1867,7 +1867,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, ...@@ -1867,7 +1867,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
if (sense_len) { if (sense_len) {
ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x301c, ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x301c,
"Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n", "Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
sp->fcport->vha->host_no, cp->device->id, cp->device->lun, sp->vha->host_no, cp->device->id, cp->device->lun,
cp); cp);
ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x302b, ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x302b,
cp->sense_buffer, sense_len); cp->sense_buffer, sense_len);
...@@ -1889,7 +1889,7 @@ struct scsi_dif_tuple { ...@@ -1889,7 +1889,7 @@ struct scsi_dif_tuple {
static inline int static inline int
qla2x00_handle_dif_error(srb_t *sp, struct sts_entry_24xx *sts24) qla2x00_handle_dif_error(srb_t *sp, struct sts_entry_24xx *sts24)
{ {
struct scsi_qla_host *vha = sp->fcport->vha; struct scsi_qla_host *vha = sp->vha;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
uint8_t *ap = &sts24->data[12]; uint8_t *ap = &sts24->data[12];
uint8_t *ep = &sts24->data[20]; uint8_t *ep = &sts24->data[20];
...@@ -2154,7 +2154,7 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt, ...@@ -2154,7 +2154,7 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt,
bsg_job->reply_len = sizeof(struct fc_bsg_reply); bsg_job->reply_len = sizeof(struct fc_bsg_reply);
/* Always return DID_OK, bsg will send the vendor specific response /* Always return DID_OK, bsg will send the vendor specific response
* in this case only */ * in this case only */
sp->done(vha, sp, (DID_OK << 6)); sp->done(sp, DID_OK << 6);
} }
...@@ -2527,7 +2527,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) ...@@ -2527,7 +2527,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
resid_len, fw_resid_len, sp, cp); resid_len, fw_resid_len, sp, cp);
if (rsp->status_srb == NULL) if (rsp->status_srb == NULL)
sp->done(vha, sp, res); sp->done(sp, res);
} }
/** /**
...@@ -2584,7 +2584,7 @@ qla2x00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt) ...@@ -2584,7 +2584,7 @@ qla2x00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt)
/* Place command on done queue. */ /* Place command on done queue. */
if (sense_len == 0) { if (sense_len == 0) {
rsp->status_srb = NULL; rsp->status_srb = NULL;
sp->done(vha, sp, cp->result); sp->done(sp, cp->result);
} }
} }
...@@ -2620,7 +2620,7 @@ qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt) ...@@ -2620,7 +2620,7 @@ qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt)
sp = qla2x00_get_sp_from_handle(vha, func, req, pkt); sp = qla2x00_get_sp_from_handle(vha, func, req, pkt);
if (sp) { if (sp) {
sp->done(vha, sp, res); sp->done(sp, res);
return; return;
} }
fatal: fatal:
...@@ -2678,7 +2678,7 @@ qla24xx_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -2678,7 +2678,7 @@ qla24xx_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
abt = &sp->u.iocb_cmd; abt = &sp->u.iocb_cmd;
abt->u.abt.comp_status = le32_to_cpu(pkt->nport_handle); abt->u.abt.comp_status = le32_to_cpu(pkt->nport_handle);
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
/** /**
......
...@@ -1789,16 +1789,16 @@ qlafx00_update_host_attr(scsi_qla_host_t *vha, struct port_info_data *pinfo) ...@@ -1789,16 +1789,16 @@ qlafx00_update_host_attr(scsi_qla_host_t *vha, struct port_info_data *pinfo)
static void static void
qla2x00_fxdisc_iocb_timeout(void *data) qla2x00_fxdisc_iocb_timeout(void *data)
{ {
srb_t *sp = (srb_t *)data; srb_t *sp = data;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
complete(&lio->u.fxiocb.fxiocb_comp); complete(&lio->u.fxiocb.fxiocb_comp);
} }
static void static void
qla2x00_fxdisc_sp_done(void *data, void *ptr, int res) qla2x00_fxdisc_sp_done(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct srb_iocb *lio = &sp->u.iocb_cmd; struct srb_iocb *lio = &sp->u.iocb_cmd;
complete(&lio->u.fxiocb.fxiocb_comp); complete(&lio->u.fxiocb.fxiocb_comp);
...@@ -1999,7 +1999,7 @@ qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type) ...@@ -1999,7 +1999,7 @@ qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type)
dma_free_coherent(&ha->pdev->dev, fdisc->u.fxiocb.req_len, dma_free_coherent(&ha->pdev->dev, fdisc->u.fxiocb.req_len,
fdisc->u.fxiocb.req_addr, fdisc->u.fxiocb.req_dma_handle); fdisc->u.fxiocb.req_addr, fdisc->u.fxiocb.req_dma_handle);
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
return rval; return rval;
} }
...@@ -2127,7 +2127,7 @@ static inline void ...@@ -2127,7 +2127,7 @@ static inline void
qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
uint32_t sense_len, struct rsp_que *rsp, int res) uint32_t sense_len, struct rsp_que *rsp, int res)
{ {
struct scsi_qla_host *vha = sp->fcport->vha; struct scsi_qla_host *vha = sp->vha;
struct scsi_cmnd *cp = GET_CMD_SP(sp); struct scsi_cmnd *cp = GET_CMD_SP(sp);
uint32_t track_sense_len; uint32_t track_sense_len;
...@@ -2162,7 +2162,7 @@ qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, ...@@ -2162,7 +2162,7 @@ qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
if (sense_len) { if (sense_len) {
ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x3039, ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x3039,
"Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n", "Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
sp->fcport->vha->host_no, cp->device->id, cp->device->lun, sp->vha->host_no, cp->device->id, cp->device->lun,
cp); cp);
ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x3049, ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x3049,
cp->sense_buffer, sense_len); cp->sense_buffer, sense_len);
...@@ -2181,7 +2181,7 @@ qlafx00_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -2181,7 +2181,7 @@ qlafx00_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
(sstatus & cpu_to_le16((uint16_t)SS_RESPONSE_INFO_LEN_VALID))) (sstatus & cpu_to_le16((uint16_t)SS_RESPONSE_INFO_LEN_VALID)))
cpstatus = cpu_to_le16((uint16_t)CS_INCOMPLETE); cpstatus = cpu_to_le16((uint16_t)CS_INCOMPLETE);
tmf->u.tmf.comp_status = cpstatus; tmf->u.tmf.comp_status = cpstatus;
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
static void static void
...@@ -2198,7 +2198,7 @@ qlafx00_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -2198,7 +2198,7 @@ qlafx00_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
abt = &sp->u.iocb_cmd; abt = &sp->u.iocb_cmd;
abt->u.abt.comp_status = pkt->tgt_id_sts; abt->u.abt.comp_status = pkt->tgt_id_sts;
sp->done(vha, sp, 0); sp->done(sp, 0);
} }
static void static void
...@@ -2264,7 +2264,7 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req, ...@@ -2264,7 +2264,7 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,
bsg_reply->reply_payload_rcv_len = bsg_reply->reply_payload_rcv_len =
bsg_job->reply_payload.payload_len; bsg_job->reply_payload.payload_len;
} }
sp->done(vha, sp, res); sp->done(sp, res);
} }
/** /**
...@@ -2537,7 +2537,7 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) ...@@ -2537,7 +2537,7 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
par_sense_len, rsp_info_len); par_sense_len, rsp_info_len);
if (rsp->status_srb == NULL) if (rsp->status_srb == NULL)
sp->done(vha, sp, res); sp->done(sp, res);
} }
/** /**
...@@ -2614,7 +2614,7 @@ qlafx00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt) ...@@ -2614,7 +2614,7 @@ qlafx00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt)
/* Place command on done queue. */ /* Place command on done queue. */
if (sense_len == 0) { if (sense_len == 0) {
rsp->status_srb = NULL; rsp->status_srb = NULL;
sp->done(vha, sp, cp->result); sp->done(sp, cp->result);
} }
} }
...@@ -2695,7 +2695,7 @@ qlafx00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, ...@@ -2695,7 +2695,7 @@ qlafx00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp,
sp = qla2x00_get_sp_from_handle(vha, func, req, pkt); sp = qla2x00_get_sp_from_handle(vha, func, req, pkt);
if (sp) { if (sp) {
sp->done(vha, sp, res); sp->done(sp, res);
return; return;
} }
...@@ -2997,7 +2997,7 @@ qlafx00_build_scsi_iocbs(srb_t *sp, struct cmd_type_7_fx00 *cmd_pkt, ...@@ -2997,7 +2997,7 @@ qlafx00_build_scsi_iocbs(srb_t *sp, struct cmd_type_7_fx00 *cmd_pkt,
cont_a64_entry_t lcont_pkt; cont_a64_entry_t lcont_pkt;
cont_a64_entry_t *cont_pkt; cont_a64_entry_t *cont_pkt;
vha = sp->fcport->vha; vha = sp->vha;
req = vha->req; req = vha->req;
cmd = GET_CMD_SP(sp); cmd = GET_CMD_SP(sp);
...@@ -3081,7 +3081,7 @@ qlafx00_start_scsi(srb_t *sp) ...@@ -3081,7 +3081,7 @@ qlafx00_start_scsi(srb_t *sp)
struct req_que *req = NULL; struct req_que *req = NULL;
struct rsp_que *rsp = NULL; struct rsp_que *rsp = NULL;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
struct scsi_qla_host *vha = sp->fcport->vha; struct scsi_qla_host *vha = sp->vha;
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
struct cmd_type_7_fx00 *cmd_pkt; struct cmd_type_7_fx00 *cmd_pkt;
struct cmd_type_7_fx00 lcmd_pkt; struct cmd_type_7_fx00 lcmd_pkt;
...@@ -3205,7 +3205,7 @@ void ...@@ -3205,7 +3205,7 @@ void
qlafx00_tm_iocb(srb_t *sp, struct tsk_mgmt_entry_fx00 *ptm_iocb) qlafx00_tm_iocb(srb_t *sp, struct tsk_mgmt_entry_fx00 *ptm_iocb)
{ {
struct srb_iocb *fxio = &sp->u.iocb_cmd; struct srb_iocb *fxio = &sp->u.iocb_cmd;
scsi_qla_host_t *vha = sp->fcport->vha; scsi_qla_host_t *vha = sp->vha;
struct req_que *req = vha->req; struct req_que *req = vha->req;
struct tsk_mgmt_entry_fx00 tm_iocb; struct tsk_mgmt_entry_fx00 tm_iocb;
struct scsi_lun llun; struct scsi_lun llun;
...@@ -3232,7 +3232,7 @@ void ...@@ -3232,7 +3232,7 @@ void
qlafx00_abort_iocb(srb_t *sp, struct abort_iocb_entry_fx00 *pabt_iocb) qlafx00_abort_iocb(srb_t *sp, struct abort_iocb_entry_fx00 *pabt_iocb)
{ {
struct srb_iocb *fxio = &sp->u.iocb_cmd; struct srb_iocb *fxio = &sp->u.iocb_cmd;
scsi_qla_host_t *vha = sp->fcport->vha; scsi_qla_host_t *vha = sp->vha;
struct req_que *req = vha->req; struct req_que *req = vha->req;
struct abort_iocb_entry_fx00 abt_iocb; struct abort_iocb_entry_fx00 abt_iocb;
...@@ -3346,8 +3346,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3346,8 +3346,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
REQUEST_ENTRY_SIZE); REQUEST_ENTRY_SIZE);
cont_pkt = cont_pkt =
qlafx00_prep_cont_type1_iocb( qlafx00_prep_cont_type1_iocb(
sp->fcport->vha->req, sp->vha->req, &lcont_pkt);
&lcont_pkt);
cur_dsd = (__le32 *) cur_dsd = (__le32 *)
lcont_pkt.dseg_0_address; lcont_pkt.dseg_0_address;
avail_dsds = 5; avail_dsds = 5;
...@@ -3368,7 +3367,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3368,7 +3367,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
&lcont_pkt, REQUEST_ENTRY_SIZE); &lcont_pkt, REQUEST_ENTRY_SIZE);
ql_dump_buffer( ql_dump_buffer(
ql_dbg_user + ql_dbg_verbose, ql_dbg_user + ql_dbg_verbose,
sp->fcport->vha, 0x3042, sp->vha, 0x3042,
(uint8_t *)&lcont_pkt, (uint8_t *)&lcont_pkt,
REQUEST_ENTRY_SIZE); REQUEST_ENTRY_SIZE);
} }
...@@ -3377,7 +3376,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3377,7 +3376,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
memcpy_toio((void __iomem *)cont_pkt, memcpy_toio((void __iomem *)cont_pkt,
&lcont_pkt, REQUEST_ENTRY_SIZE); &lcont_pkt, REQUEST_ENTRY_SIZE);
ql_dump_buffer(ql_dbg_user + ql_dbg_verbose, ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
sp->fcport->vha, 0x3043, sp->vha, 0x3043,
(uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE); (uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE);
} }
} }
...@@ -3409,8 +3408,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3409,8 +3408,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
REQUEST_ENTRY_SIZE); REQUEST_ENTRY_SIZE);
cont_pkt = cont_pkt =
qlafx00_prep_cont_type1_iocb( qlafx00_prep_cont_type1_iocb(
sp->fcport->vha->req, sp->vha->req, &lcont_pkt);
&lcont_pkt);
cur_dsd = (__le32 *) cur_dsd = (__le32 *)
lcont_pkt.dseg_0_address; lcont_pkt.dseg_0_address;
avail_dsds = 5; avail_dsds = 5;
...@@ -3431,7 +3429,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3431,7 +3429,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
REQUEST_ENTRY_SIZE); REQUEST_ENTRY_SIZE);
ql_dump_buffer( ql_dump_buffer(
ql_dbg_user + ql_dbg_verbose, ql_dbg_user + ql_dbg_verbose,
sp->fcport->vha, 0x3045, sp->vha, 0x3045,
(uint8_t *)&lcont_pkt, (uint8_t *)&lcont_pkt,
REQUEST_ENTRY_SIZE); REQUEST_ENTRY_SIZE);
} }
...@@ -3440,7 +3438,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3440,7 +3438,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
memcpy_toio((void __iomem *)cont_pkt, memcpy_toio((void __iomem *)cont_pkt,
&lcont_pkt, REQUEST_ENTRY_SIZE); &lcont_pkt, REQUEST_ENTRY_SIZE);
ql_dump_buffer(ql_dbg_user + ql_dbg_verbose, ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
sp->fcport->vha, 0x3046, sp->vha, 0x3046,
(uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE); (uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE);
} }
} }
...@@ -3452,7 +3450,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb) ...@@ -3452,7 +3450,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
} }
ql_dump_buffer(ql_dbg_user + ql_dbg_verbose, ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
sp->fcport->vha, 0x3047, sp->vha, 0x3047,
(uint8_t *)&fx_iocb, sizeof(struct fxdisc_entry_fx00)); (uint8_t *)&fx_iocb, sizeof(struct fxdisc_entry_fx00));
memcpy_toio((void __iomem *)pfxiocb, &fx_iocb, memcpy_toio((void __iomem *)pfxiocb, &fx_iocb,
......
...@@ -613,11 +613,11 @@ qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size) ...@@ -613,11 +613,11 @@ qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size)
} }
void void
qla2x00_sp_free_dma(void *vha, void *ptr) qla2x00_sp_free_dma(void *ptr)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct qla_hw_data *ha = sp->vha->hw;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
struct qla_hw_data *ha = sp->fcport->vha->hw;
void *ctx = GET_CMD_CTX_SP(sp); void *ctx = GET_CMD_CTX_SP(sp);
if (sp->flags & SRB_DMA_VALID) { if (sp->flags & SRB_DMA_VALID) {
...@@ -656,20 +656,19 @@ qla2x00_sp_free_dma(void *vha, void *ptr) ...@@ -656,20 +656,19 @@ qla2x00_sp_free_dma(void *vha, void *ptr)
} }
CMD_SP(cmd) = NULL; CMD_SP(cmd) = NULL;
qla2x00_rel_sp(sp->fcport->vha, sp); qla2x00_rel_sp(sp);
} }
void void
qla2x00_sp_compl(void *data, void *ptr, int res) qla2x00_sp_compl(void *ptr, int res)
{ {
struct qla_hw_data *ha = (struct qla_hw_data *)data; srb_t *sp = ptr;
srb_t *sp = (srb_t *)ptr;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
cmd->result = res; cmd->result = res;
if (atomic_read(&sp->ref_count) == 0) { if (atomic_read(&sp->ref_count) == 0) {
ql_dbg(ql_dbg_io, sp->fcport->vha, 0x3015, ql_dbg(ql_dbg_io, sp->vha, 0x3015,
"SP reference-count to ZERO -- sp=%p cmd=%p.\n", "SP reference-count to ZERO -- sp=%p cmd=%p.\n",
sp, GET_CMD_SP(sp)); sp, GET_CMD_SP(sp));
if (ql2xextended_error_logging & ql_dbg_io) if (ql2xextended_error_logging & ql_dbg_io)
...@@ -679,12 +678,12 @@ qla2x00_sp_compl(void *data, void *ptr, int res) ...@@ -679,12 +678,12 @@ qla2x00_sp_compl(void *data, void *ptr, int res)
if (!atomic_dec_and_test(&sp->ref_count)) if (!atomic_dec_and_test(&sp->ref_count))
return; return;
qla2x00_sp_free_dma(ha, sp); qla2x00_sp_free_dma(sp);
cmd->scsi_done(cmd); cmd->scsi_done(cmd);
} }
void void
qla2xxx_qpair_sp_free_dma(void *vha, void *ptr) qla2xxx_qpair_sp_free_dma(void *ptr)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = (srb_t *)ptr;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
...@@ -730,9 +729,9 @@ qla2xxx_qpair_sp_free_dma(void *vha, void *ptr) ...@@ -730,9 +729,9 @@ qla2xxx_qpair_sp_free_dma(void *vha, void *ptr)
} }
void void
qla2xxx_qpair_sp_compl(void *data, void *ptr, int res) qla2xxx_qpair_sp_compl(void *ptr, int res)
{ {
srb_t *sp = (srb_t *)ptr; srb_t *sp = ptr;
struct scsi_cmnd *cmd = GET_CMD_SP(sp); struct scsi_cmnd *cmd = GET_CMD_SP(sp);
cmd->result = res; cmd->result = res;
...@@ -748,7 +747,7 @@ qla2xxx_qpair_sp_compl(void *data, void *ptr, int res) ...@@ -748,7 +747,7 @@ qla2xxx_qpair_sp_compl(void *data, void *ptr, int res)
if (!atomic_dec_and_test(&sp->ref_count)) if (!atomic_dec_and_test(&sp->ref_count))
return; return;
qla2xxx_qpair_sp_free_dma(sp->fcport->vha, sp); qla2xxx_qpair_sp_free_dma(sp);
cmd->scsi_done(cmd); cmd->scsi_done(cmd);
} }
...@@ -869,7 +868,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ...@@ -869,7 +868,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
return 0; return 0;
qc24_host_busy_free_sp: qc24_host_busy_free_sp:
qla2x00_sp_free_dma(ha, sp); qla2x00_sp_free_dma(sp);
qc24_host_busy: qc24_host_busy:
return SCSI_MLQUEUE_HOST_BUSY; return SCSI_MLQUEUE_HOST_BUSY;
...@@ -958,7 +957,7 @@ qla2xxx_mqueuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd, ...@@ -958,7 +957,7 @@ qla2xxx_mqueuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd,
return 0; return 0;
qc24_host_busy_free_sp: qc24_host_busy_free_sp:
qla2xxx_qpair_sp_free_dma(vha, sp); qla2xxx_qpair_sp_free_dma(sp);
qc24_host_busy: qc24_host_busy:
return SCSI_MLQUEUE_HOST_BUSY; return SCSI_MLQUEUE_HOST_BUSY;
...@@ -1238,7 +1237,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) ...@@ -1238,7 +1237,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
} }
spin_lock_irqsave(&ha->hardware_lock, flags); spin_lock_irqsave(&ha->hardware_lock, flags);
sp->done(vha, sp, 0); sp->done(sp, 0);
spin_unlock_irqrestore(&ha->hardware_lock, flags); spin_unlock_irqrestore(&ha->hardware_lock, flags);
/* Did the command return during mailbox execution? */ /* Did the command return during mailbox execution? */
...@@ -1283,7 +1282,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t, ...@@ -1283,7 +1282,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t,
continue; continue;
if (sp->type != SRB_SCSI_CMD) if (sp->type != SRB_SCSI_CMD)
continue; continue;
if (vha->vp_idx != sp->fcport->vha->vp_idx) if (vha->vp_idx != sp->vha->vp_idx)
continue; continue;
match = 0; match = 0;
cmd = GET_CMD_SP(sp); cmd = GET_CMD_SP(sp);
...@@ -1663,7 +1662,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) ...@@ -1663,7 +1662,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
spin_lock_irqsave(&ha->hardware_lock, flags); spin_lock_irqsave(&ha->hardware_lock, flags);
} }
req->outstanding_cmds[cnt] = NULL; req->outstanding_cmds[cnt] = NULL;
sp->done(vha, sp, res); sp->done(sp, res);
} }
} }
} }
......
...@@ -535,10 +535,10 @@ static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport, ...@@ -535,10 +535,10 @@ static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport,
} }
static static
void qla2x00_async_nack_sp_done(void *v, void *s, int res) void qla2x00_async_nack_sp_done(void *s, int res)
{ {
struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
struct srb *sp = (struct srb *)s; struct srb *sp = (struct srb *)s;
struct scsi_qla_host *vha = sp->vha;
unsigned long flags; unsigned long flags;
ql_dbg(ql_dbg_disc, vha, 0xffff, ql_dbg(ql_dbg_disc, vha, 0xffff,
...@@ -595,7 +595,7 @@ void qla2x00_async_nack_sp_done(void *v, void *s, int res) ...@@ -595,7 +595,7 @@ void qla2x00_async_nack_sp_done(void *v, void *s, int res)
} }
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
sp->free(vha, sp); sp->free(sp);
} }
int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport, int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
...@@ -645,7 +645,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport, ...@@ -645,7 +645,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
return rval; return rval;
done_free_sp: done_free_sp:
sp->free(vha, sp); sp->free(sp);
done: done:
fcport->flags &= ~FCF_ASYNC_SENT; fcport->flags &= ~FCF_ASYNC_SENT;
return rval; return rval;
......
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