diff options
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 10 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 6 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 15 |
3 files changed, 19 insertions, 12 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 7096945ea234..7b3efd531297 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -2476,17 +2476,9 @@ typedef struct scsi_qla_host { | |||
2476 | */ | 2476 | */ |
2477 | #define LOOP_TRANSITION(ha) \ | 2477 | #define LOOP_TRANSITION(ha) \ |
2478 | (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \ | 2478 | (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \ |
2479 | test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) | 2479 | test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \ |
2480 | |||
2481 | #define LOOP_NOT_READY(ha) \ | ||
2482 | ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \ | ||
2483 | test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) || \ | ||
2484 | test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \ | ||
2485 | test_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags)) || \ | ||
2486 | atomic_read(&ha->loop_state) == LOOP_DOWN) | 2480 | atomic_read(&ha->loop_state) == LOOP_DOWN) |
2487 | 2481 | ||
2488 | #define LOOP_RDY(ha) (!LOOP_NOT_READY(ha)) | ||
2489 | |||
2490 | #define TGT_Q(ha, t) (ha->otgt[t]) | 2482 | #define TGT_Q(ha, t) (ha->otgt[t]) |
2491 | 2483 | ||
2492 | #define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata) | 2484 | #define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata) |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 2d720121a0d3..c46d2469b85f 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -1259,7 +1259,7 @@ qla2x00_configure_hba(scsi_qla_host_t *ha) | |||
1259 | rval = qla2x00_get_adapter_id(ha, | 1259 | rval = qla2x00_get_adapter_id(ha, |
1260 | &loop_id, &al_pa, &area, &domain, &topo); | 1260 | &loop_id, &al_pa, &area, &domain, &topo); |
1261 | if (rval != QLA_SUCCESS) { | 1261 | if (rval != QLA_SUCCESS) { |
1262 | if (LOOP_NOT_READY(ha) || atomic_read(&ha->loop_down_timer) || | 1262 | if (LOOP_TRANSITION(ha) || atomic_read(&ha->loop_down_timer) || |
1263 | (rval == QLA_COMMAND_ERROR && loop_id == 0x7)) { | 1263 | (rval == QLA_COMMAND_ERROR && loop_id == 0x7)) { |
1264 | DEBUG2(printk("%s(%ld) Loop is in a transition state\n", | 1264 | DEBUG2(printk("%s(%ld) Loop is in a transition state\n", |
1265 | __func__, ha->host_no)); | 1265 | __func__, ha->host_no)); |
@@ -1796,7 +1796,7 @@ qla2x00_configure_loop(scsi_qla_host_t *ha) | |||
1796 | } | 1796 | } |
1797 | 1797 | ||
1798 | if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) { | 1798 | if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) { |
1799 | if (LOOP_NOT_READY(ha)) { | 1799 | if (LOOP_TRANSITION(ha)) { |
1800 | rval = QLA_FUNCTION_FAILED; | 1800 | rval = QLA_FUNCTION_FAILED; |
1801 | } else { | 1801 | } else { |
1802 | rval = qla2x00_configure_fabric(ha); | 1802 | rval = qla2x00_configure_fabric(ha); |
@@ -2369,7 +2369,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, struct list_head *new_fcports) | |||
2369 | if (qla2x00_is_reserved_id(ha, loop_id)) | 2369 | if (qla2x00_is_reserved_id(ha, loop_id)) |
2370 | continue; | 2370 | continue; |
2371 | 2371 | ||
2372 | if (atomic_read(&ha->loop_down_timer) || LOOP_NOT_READY(ha)) | 2372 | if (atomic_read(&ha->loop_down_timer) || LOOP_TRANSITION(ha)) |
2373 | break; | 2373 | break; |
2374 | 2374 | ||
2375 | if (swl != NULL) { | 2375 | if (swl != NULL) { |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 09afc0f06bd4..5181d966fecb 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -909,6 +909,21 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt) | |||
909 | resid = resid_len; | 909 | resid = resid_len; |
910 | cp->resid = resid; | 910 | cp->resid = resid; |
911 | CMD_RESID_LEN(cp) = resid; | 911 | CMD_RESID_LEN(cp) = resid; |
912 | |||
913 | if (!lscsi_status && | ||
914 | ((unsigned)(cp->request_bufflen - resid) < | ||
915 | cp->underflow)) { | ||
916 | qla_printk(KERN_INFO, ha, | ||
917 | "scsi(%ld:%d:%d:%d): Mid-layer underflow " | ||
918 | "detected (%x of %x bytes)...returning " | ||
919 | "error status.\n", ha->host_no, | ||
920 | cp->device->channel, cp->device->id, | ||
921 | cp->device->lun, resid, | ||
922 | cp->request_bufflen); | ||
923 | |||
924 | cp->result = DID_ERROR << 16; | ||
925 | break; | ||
926 | } | ||
912 | } | 927 | } |
913 | cp->result = DID_OK << 16 | lscsi_status; | 928 | cp->result = DID_OK << 16 | lscsi_status; |
914 | 929 | ||