aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2011-02-23 18:27:14 -0500
committerJames Bottomley <James.Bottomley@suse.de>2011-02-25 12:59:13 -0500
commit97dec564fd4948e0e560869c80b76e166ca2a83e (patch)
tree33588cc8b6bdc3c94979f56ae3a1edd247777981 /drivers/scsi/qla2xxx
parent6aef87bea9d37d5adf45f3d1c674ccf6f95799ca (diff)
[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: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index b4a82b5f0f8b..7a7c0ecfe7dd 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -2462,22 +2462,19 @@ __qla24xx_issue_tmf(char *name, uint32_t type, struct fc_port *fcport,
2462 "-- completion status (%x).\n", __func__, 2462 "-- completion status (%x).\n", __func__,
2463 vha->host_no, le16_to_cpu(sts->comp_status))); 2463 vha->host_no, le16_to_cpu(sts->comp_status)));
2464 rval = QLA_FUNCTION_FAILED; 2464 rval = QLA_FUNCTION_FAILED;
2465 } else if (!(le16_to_cpu(sts->scsi_status) & 2465 } else if (le16_to_cpu(sts->scsi_status) &
2466 SS_RESPONSE_INFO_LEN_VALID)) { 2466 SS_RESPONSE_INFO_LEN_VALID) {
2467 DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB " 2467 if (le32_to_cpu(sts->rsp_data_len) < 4) {
2468 "-- no response info (%x).\n", __func__, vha->host_no, 2468 DEBUG2_3_11(printk("%s(%ld): ignoring inconsistent "
2469 le16_to_cpu(sts->scsi_status))); 2469 "data length -- not enough response info (%d).\n",
2470 rval = QLA_FUNCTION_FAILED; 2470 __func__, vha->host_no,
2471 } else if (le32_to_cpu(sts->rsp_data_len) < 4) { 2471 le32_to_cpu(sts->rsp_data_len)));
2472 DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB " 2472 } else if (sts->data[3]) {
2473 "-- not enough response info (%d).\n", __func__, 2473 DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB "
2474 vha->host_no, le32_to_cpu(sts->rsp_data_len))); 2474 "-- response (%x).\n", __func__,
2475 rval = QLA_FUNCTION_FAILED; 2475 vha->host_no, sts->data[3]));
2476 } else if (sts->data[3]) { 2476 rval = QLA_FUNCTION_FAILED;
2477 DEBUG2_3_11(printk("%s(%ld): failed to complete IOCB " 2477 }
2478 "-- response (%x).\n", __func__,
2479 vha->host_no, sts->data[3]));
2480 rval = QLA_FUNCTION_FAILED;
2481 } 2478 }
2482 2479
2483 /* Issue marker IOCB. */ 2480 /* Issue marker IOCB. */