scsi: qla2xxx: Fix I/O errors during LIP reset tests
authorArun Easi <aeasi@marvell.com>
Fri, 4 Sep 2020 04:51:23 +0000 (21:51 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 22 Sep 2020 22:42:45 +0000 (18:42 -0400)
In .fcp_io(), returning ENODEV as soon as remote port delete has started
can cause I/O errors. Fix this by returning EBUSY until the remote port
delete finishes.

Link: https://lore.kernel.org/r/20200904045128.23631-9-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_nvme.c

index b0c13144c21a0387162d588d2ded4703cf948228..86b6d322a12cf00b39187ec4404f0a5a2f2e287e 100644 (file)
@@ -548,6 +548,14 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
                return rval;
 
        vha = fcport->vha;
+
+       if (!(fcport->nvme_flag & NVME_FLAG_REGISTERED))
+               return rval;
+
+       if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) ||
+           (qpair && !qpair->fw_started) || fcport->deleted)
+               return -EBUSY;
+
        /*
         * If we know the dev is going away while the transport is still sending
         * IO's return busy back to stall the IO Q.  This happens when the