From: Quinn Tran <quinn.t...@cavium.com>

Task abort can take 2 paths: 1) serial/synchronous abort
where the calling thread will put to sleep, wait for completion
and free cmd resource.  2) async abort where the cmd free will
be free by the completion thread.  For path 2, driver is freeing
the SRB too early.

Fixes: f6145e86d21f ("scsi: qla2xxx: Fix race between switch cmd completion and 
timeout")
Cc: sta...@vger.kernel.org # 4.19
Signed-off-by: Quinn Tran <quinn.t...@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madh...@cavium.com>
---
 drivers/scsi/qla2xxx/qla_init.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 2e836d1427bb..0575210aa8f1 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -1850,6 +1850,8 @@ qla24xx_async_abort_cmd(srb_t *cmd_sp, bool wait)
                wait_for_completion(&abt_iocb->u.abt.comp);
                rval = abt_iocb->u.abt.comp_status == CS_COMPLETE ?
                        QLA_SUCCESS : QLA_FUNCTION_FAILED;
+       } else {
+               goto done;
        }
 
 done_free_sp:
-- 
2.12.0

Reply via email to