aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2008-08-19 19:45:29 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-10-13 09:28:51 -0400
commit056a44834950ffa51fafa6c76a720fa32e86851a (patch)
treecba7635eb187bf12a561ca77053c5db017dfa607
parentf46e307da925a7b71a0018c0510cdc6e588b87fc (diff)
[SCSI] qla2xxx: use new host byte transport errors.
This has qla2xxx use the new transport error values instead of DID_BUS_BUSY. I am not sure if all the errors in qla_isr.c I changed are transport related. We end up blocking/deleting the rport for all of them so it is better to use the new transport error since the fc classs will decide when to fail the IO. With this patch if I pull a cable then IO that had reached the driver, will be failed with DID_TRANSPORT_DISRUPTED (not including tape). The fc class will then fail the IO when the fast io fail tmo has fired, and the driver will flush any other commands running. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Cc: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index fc4bfa7f839c..a76efd99d007 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1187,7 +1187,12 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
1187 cp->serial_number, comp_status, 1187 cp->serial_number, comp_status,
1188 atomic_read(&fcport->state))); 1188 atomic_read(&fcport->state)));
1189 1189
1190 cp->result = DID_BUS_BUSY << 16; 1190 /*
1191 * We are going to have the fc class block the rport
1192 * while we try to recover so instruct the mid layer
1193 * to requeue until the class decides how to handle this.
1194 */
1195 cp->result = DID_TRANSPORT_DISRUPTED << 16;
1191 if (atomic_read(&fcport->state) == FCS_ONLINE) 1196 if (atomic_read(&fcport->state) == FCS_ONLINE)
1192 qla2x00_mark_device_lost(fcport->ha, fcport, 1, 1); 1197 qla2x00_mark_device_lost(fcport->ha, fcport, 1, 1);
1193 break; 1198 break;
@@ -1214,7 +1219,12 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
1214 break; 1219 break;
1215 1220
1216 case CS_TIMEOUT: 1221 case CS_TIMEOUT:
1217 cp->result = DID_BUS_BUSY << 16; 1222 /*
1223 * We are going to have the fc class block the rport
1224 * while we try to recover so instruct the mid layer
1225 * to requeue until the class decides how to handle this.
1226 */
1227 cp->result = DID_TRANSPORT_DISRUPTED << 16;
1218 1228
1219 if (IS_FWI2_CAPABLE(ha)) { 1229 if (IS_FWI2_CAPABLE(ha)) {
1220 DEBUG2(printk(KERN_INFO 1230 DEBUG2(printk(KERN_INFO