Commit c4e521b6 authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen

scsi: qla2xxx: Split the __qla2x00_abort_all_cmds() function

Nesting in __qla2x00_abort_all_cmds() is way too deep. Reduce the nesting
level by introducing a helper function. This patch does not change any
functionality.
Reviewed-by: default avatarLaurence Oberman <loberman@redhat.com>
Acked-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 14e9a890
......@@ -1746,6 +1746,41 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
return QLA_SUCCESS;
}
static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res,
unsigned long *flags)
__releases(qp->qp_lock_ptr)
__acquires(qp->qp_lock_ptr)
{
scsi_qla_host_t *vha = qp->vha;
struct qla_hw_data *ha = vha->hw;
if (sp->type == SRB_NVME_CMD || sp->type == SRB_NVME_LS) {
if (!sp_get(sp)) {
/* got sp */
spin_unlock_irqrestore(qp->qp_lock_ptr, *flags);
qla_nvme_abort(ha, sp, res);
spin_lock_irqsave(qp->qp_lock_ptr, *flags);
}
} else if (GET_CMD_SP(sp) && !ha->flags.eeh_busy &&
!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) &&
!qla2x00_isp_reg_stat(ha) && sp->type == SRB_SCSI_CMD) {
/*
* Don't abort commands in adapter during EEH recovery as it's
* not accessible/responding.
*
* Get a reference to the sp and drop the lock. The reference
* ensures this sp->done() call and not the call in
* qla2xxx_eh_abort() ends the SCSI cmd (with result 'res').
*/
if (!sp_get(sp)) {
spin_unlock_irqrestore(qp->qp_lock_ptr, *flags);
qla2xxx_eh_abort(GET_CMD_SP(sp));
spin_lock_irqsave(qp->qp_lock_ptr, *flags);
}
}
sp->done(sp, res);
}
static void
__qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
{
......@@ -1768,44 +1803,7 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
req->outstanding_cmds[cnt] = NULL;
switch (sp->cmd_type) {
case TYPE_SRB:
if (sp->type == SRB_NVME_CMD ||
sp->type == SRB_NVME_LS) {
if (!sp_get(sp)) {
/* got sp */
spin_unlock_irqrestore
(qp->qp_lock_ptr,
flags);
qla_nvme_abort(ha, sp, res);
spin_lock_irqsave
(qp->qp_lock_ptr, flags);
}
} else if (GET_CMD_SP(sp) &&
!ha->flags.eeh_busy &&
(!test_bit(ABORT_ISP_ACTIVE,
&vha->dpc_flags)) &&
!qla2x00_isp_reg_stat(ha) &&
(sp->type == SRB_SCSI_CMD)) {
/*
* Don't abort commands in adapter
* during EEH recovery as it's not
* accessible/responding.
*
* Get a reference to the sp and drop
* the lock. The reference ensures this
* sp->done() call and not the call in
* qla2xxx_eh_abort() ends the SCSI cmd
* (with result 'res').
*/
if (!sp_get(sp)) {
spin_unlock_irqrestore
(qp->qp_lock_ptr, flags);
qla2xxx_eh_abort(
GET_CMD_SP(sp));
spin_lock_irqsave
(qp->qp_lock_ptr, flags);
}
}
sp->done(sp, res);
qla2x00_abort_srb(qp, sp, res, &flags);
break;
case TYPE_TGT_CMD:
if (!vha->hw->tgt.tgt_ops || !tgt ||
......
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