mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
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:
parent
14e9a890ec
commit
c4e521b654
@ -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 ||
|
||||
|
Loading…
Reference in New Issue
Block a user