--- a/drivers/scsi/qla2xxx/qla_isr.c 2004-02-02 09:38:29.000000000 -0800 +++ b/drivers/scsi/qla2xxx/qla_isr.c 2004-02-10 13:51:30.474292736 -0800 @@ -828,6 +828,7 @@ uint8_t lscsi_status; uint32_t resid; uint8_t sense_sz = 0; + uint16_t rsp_info_len; /* Fast path completion. */ if (le16_to_cpu(pkt->comp_status) == CS_COMPLETE && @@ -919,6 +920,23 @@ } } + /* Check for any FCP transport errors. */ + if (scsi_status & SS_RESPONSE_INFO_LEN_VALID) { + rsp_info_len = le16_to_cpu(pkt->rsp_info_len); + if (rsp_info_len > 3 && pkt->rsp_info[3]) { + DEBUG2(printk("scsi(%ld:%d:%d:%d) FCP I/O protocol " + "failure (%x/%02x%02x%02x%02x%02x%02x%02x%02x)..." + "retrying command\n", ha->host_no, b, t, l, + rsp_info_len, pkt->rsp_info[0], pkt->rsp_info[1], + pkt->rsp_info[2], pkt->rsp_info[3], + pkt->rsp_info[4], pkt->rsp_info[5], + pkt->rsp_info[6], pkt->rsp_info[7])); + + cp->result = DID_BUS_BUSY << 16; + return; + } + } + /* * Based on Host and scsi status generate status code for Linux */