Commit 97dec564 authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Adjust FCP_RSP response-info field check after TMF completion.



Based on reading of the FCP2/4 specification, the driver cannot
expect the storage device to send FCP_RSP information. Instead,
the driver should interpret the data which is present in the frame
to base decisions on the success or failure of the system.

Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarMadhuranath Iyengar <Madhu.Iyengar@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 6aef87be
Loading
Loading
Loading
Loading
+13 −16
Original line number Diff line number Diff line
@@ -2462,23 +2462,20 @@ __qla24xx_issue_tmf(char *name, uint32_t type, struct fc_port *fcport,
		    "-- completion status (%x).\n", __func__,
		    vha->host_no, le16_to_cpu(sts->comp_status)));
		rval = QLA_FUNCTION_FAILED;
	} else if (!(le16_to_cpu(sts->scsi_status) &
	    SS_RESPONSE_INFO_LEN_VALID)) {
		DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB "
		    "-- no response info (%x).\n", __func__, vha->host_no,
		    le16_to_cpu(sts->scsi_status)));
		rval = QLA_FUNCTION_FAILED;
	} else if (le32_to_cpu(sts->rsp_data_len) < 4) {
		DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB "
		    "-- not enough response info (%d).\n", __func__,
		    vha->host_no, le32_to_cpu(sts->rsp_data_len)));
		rval = QLA_FUNCTION_FAILED;
	} else if (le16_to_cpu(sts->scsi_status) &
	    SS_RESPONSE_INFO_LEN_VALID) {
		if (le32_to_cpu(sts->rsp_data_len) < 4) {
			DEBUG2_3_11(printk("%s(%ld): ignoring inconsistent "
			    "data length -- not enough response info (%d).\n",
			    __func__, vha->host_no,
			    le32_to_cpu(sts->rsp_data_len)));
		} else if (sts->data[3]) {
			DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB "
			    "-- response (%x).\n", __func__,
			    vha->host_no, sts->data[3]));
			rval = QLA_FUNCTION_FAILED;
		}
	}

	/* Issue marker IOCB. */
	rval2 = qla2x00_marker(vha, req, rsp, fcport->loop_id, l,