scsi: qla2xxx: Split the __qla2x00_abort_all_cmds() function
authorBart Van Assche <bvanassche@acm.org>
Thu, 29 Nov 2018 18:25:11 +0000 (10:25 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 8 Dec 2018 02:39:09 +0000 (21:39 -0500)
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>
drivers/scsi/qla2xxx/qla_os.c

index 518f15141170e733d8acee71cf288c31db6c9261..4a75e0572121355fc43cef29628fb0ed87ba78d8 100644 (file)
@@ -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 ||