scsi: qla2xxx: Fix incorrect reporting of task management failure
authorQuinn Tran <qutran@marvell.com>
Thu, 10 Mar 2022 09:25:52 +0000 (01:25 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:40:38 +0000 (14:40 +0200)
commit 58ca5999e0367d131de82a75257fbfd5aed0195d upstream.

User experienced no task management error while target device is responding
with error. The RSP_CODE field in the status IOCB is in little endian.
Driver assumes it's big endian and it picked up erroneous data.

Convert the data back to big endian as is on the wire.

Link: https://lore.kernel.org/r/20220310092604.22950-2-njavali@marvell.com
Fixes: faef62d13463 ("[SCSI] qla2xxx: Fix Task Management command asynchronous handling")
Cc: stable@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/qla2xxx/qla_isr.c

index 5e040b6debc84ef224dbf7e05ffac1dc931eea16..c5c7d60ab25241a0c1ba787e9268d30d6a5c2bcd 100644 (file)
@@ -2248,6 +2248,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
                iocb->u.tmf.data = QLA_FUNCTION_FAILED;
        } else if ((le16_to_cpu(sts->scsi_status) &
            SS_RESPONSE_INFO_LEN_VALID)) {
+               host_to_fcp_swap(sts->data, sizeof(sts->data));
                if (le32_to_cpu(sts->rsp_data_len) < 4) {
                        ql_log(ql_log_warn, fcport->vha, 0x503b,
                            "Async-%s error - hdl=%x not enough response(%d).\n",