aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/qla2xxx/qla_nvme.c17
-rw-r--r--drivers/scsi/qla2xxx/qla_nvme.h2
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c2
3 files changed, 14 insertions, 7 deletions
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 8c05df30c083..57275bc9fe14 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -489,6 +489,9 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
489 489
490 vha = fcport->vha; 490 vha = fcport->vha;
491 491
492 if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags))
493 return rval;
494
492 /* 495 /*
493 * If we know the dev is going away while the transport is still sending 496 * If we know the dev is going away while the transport is still sending
494 * IO's return busy back to stall the IO Q. This happens when the 497 * IO's return busy back to stall the IO Q. This happens when the
@@ -597,14 +600,18 @@ static int qla_nvme_wait_on_command(srb_t *sp)
597 return ret; 600 return ret;
598} 601}
599 602
600void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp) 603void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp, int res)
601{ 604{
602 int rval; 605 int rval;
603 606
604 rval = ha->isp_ops->abort_command(sp); 607 if (!test_bit(ABORT_ISP_ACTIVE, &sp->vha->dpc_flags)) {
605 if (!rval && !qla_nvme_wait_on_command(sp)) 608 rval = ha->isp_ops->abort_command(sp);
606 ql_log(ql_log_warn, NULL, 0x2112, 609 if (!rval && !qla_nvme_wait_on_command(sp))
607 "nvme_wait_on_comand timed out waiting on sp=%p\n", sp); 610 ql_log(ql_log_warn, NULL, 0x2112,
611 "timed out waiting on sp=%p\n", sp);
612 } else {
613 sp->done(sp, res);
614 }
608} 615}
609 616
610static void qla_nvme_unregister_remote_port(struct work_struct *work) 617static void qla_nvme_unregister_remote_port(struct work_struct *work)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.h b/drivers/scsi/qla2xxx/qla_nvme.h
index 8df379478269..816854ada654 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.h
+++ b/drivers/scsi/qla2xxx/qla_nvme.h
@@ -145,7 +145,7 @@ struct pt_ls4_rx_unsol {
145void qla_nvme_register_hba(struct scsi_qla_host *); 145void qla_nvme_register_hba(struct scsi_qla_host *);
146int qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *); 146int qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *);
147void qla_nvme_delete(struct scsi_qla_host *); 147void qla_nvme_delete(struct scsi_qla_host *);
148void qla_nvme_abort(struct qla_hw_data *, struct srb *sp); 148void qla_nvme_abort(struct qla_hw_data *, struct srb *sp, int res);
149void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *, 149void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *,
150 struct req_que *); 150 struct req_que *);
151void qla24xx_async_gffid_sp_done(void *, int); 151void qla24xx_async_gffid_sp_done(void *, int);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index bd37a243c0bd..54f93f9cba48 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1734,7 +1734,7 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
1734 sp_get(sp); 1734 sp_get(sp);
1735 spin_unlock_irqrestore(qp->qp_lock_ptr, 1735 spin_unlock_irqrestore(qp->qp_lock_ptr,
1736 flags); 1736 flags);
1737 qla_nvme_abort(ha, sp); 1737 qla_nvme_abort(ha, sp, res);
1738 spin_lock_irqsave(qp->qp_lock_ptr, 1738 spin_lock_irqsave(qp->qp_lock_ptr,
1739 flags); 1739 flags);
1740 } else if (GET_CMD_SP(sp) && 1740 } else if (GET_CMD_SP(sp) &&