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: Laurence Oberman <loberman@redhat.com> Acked-by: Himanshu Madhani <himanshu.madhani@cavium.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
14e9a890ec
commit
c4e521b654
@ -1746,6 +1746,41 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
|
|||||||
return QLA_SUCCESS;
|
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
|
static void
|
||||||
__qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
|
__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;
|
req->outstanding_cmds[cnt] = NULL;
|
||||||
switch (sp->cmd_type) {
|
switch (sp->cmd_type) {
|
||||||
case TYPE_SRB:
|
case TYPE_SRB:
|
||||||
if (sp->type == SRB_NVME_CMD ||
|
qla2x00_abort_srb(qp, sp, res, &flags);
|
||||||
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);
|
|
||||||
break;
|
break;
|
||||||
case TYPE_TGT_CMD:
|
case TYPE_TGT_CMD:
|
||||||
if (!vha->hw->tgt.tgt_ops || !tgt ||
|
if (!vha->hw->tgt.tgt_ops || !tgt ||
|
||||||
|
Reference in New Issue
Block a user