diff options
-rw-r--r-- | drivers/scsi/qla2xxx/qla_nvme.c | 17 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_nvme.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 2 |
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 | ||
600 | void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp) | 603 | void 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 | ||
610 | static void qla_nvme_unregister_remote_port(struct work_struct *work) | 617 | static 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 { | |||
145 | void qla_nvme_register_hba(struct scsi_qla_host *); | 145 | void qla_nvme_register_hba(struct scsi_qla_host *); |
146 | int qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *); | 146 | int qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *); |
147 | void qla_nvme_delete(struct scsi_qla_host *); | 147 | void qla_nvme_delete(struct scsi_qla_host *); |
148 | void qla_nvme_abort(struct qla_hw_data *, struct srb *sp); | 148 | void qla_nvme_abort(struct qla_hw_data *, struct srb *sp, int res); |
149 | void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *, | 149 | void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *, |
150 | struct req_que *); | 150 | struct req_que *); |
151 | void qla24xx_async_gffid_sp_done(void *, int); | 151 | void 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) && |