> On Nov 27, 2018, at 3:04 PM, Bart Van Assche wrote:
>
> External Email
>
> 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.
>
> Cc: Himanshu Madhani
> Signed-off-by: Bart Van Assche
> ---
> drivers/scsi/qla2xxx/qla_os.c | 89 +--
> 1 file changed, 44 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
> index b658b9a5eb1e..247f16969f0f 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -1746,10 +1746,52 @@ 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;
> + int status;
> +
> + 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);
> + status = qla2xxx_eh_abort(GET_CMD_SP(sp));
> + spin_lock_irqsave(qp->qp_lock_ptr, *flags);
> + /*
> +* Get rid of extra reference caused by early exit
> +* from qla2xxx_eh_abort().
> +*/
> + if (status == FAST_IO_FAIL)
> + atomic_dec(&sp->ref_count);
> + }
> + }
> + sp->done(sp, res);
> +}
> +
> static void
> __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
> {
> - int cnt, status;
> + int cnt;
>unsigned long flags;
>srb_t *sp;
>scsi_qla_host_t *vha = qp->vha;
> @@ -1768,50 +1810,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').
> -