summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrasanna Mumbai <prasanna.mumbai@qlogic.com>2011-05-18 08:17:06 +0200
committerJames Bottomley <jbottomley@parallels.com>2011-05-24 18:39:29 +0200
commit6d78bd56be54286a72413db82d87fc371867629f (patch)
tree8c7d09eee7b8cd8622d8af8e401ac244c482b10e
parent[SCSI] qla4xxx: Dump HW/FW reg to figure out what caused FW to be hung for IS... (diff)
downloadlinux-6d78bd56be54286a72413db82d87fc371867629f.tar.xz
linux-6d78bd56be54286a72413db82d87fc371867629f.zip
[SCSI] qla4xxx: Complete the cmd if sense_len is zero
Complete the cmd if sense length is zero. For cases where sense data spans across multiple iocb's by FW, we need to hold on to the I/O (ha->status_srb != NULL) till we have processed them all and copied the sense data from internal buffer to scsi_cmd sense buffer. Signed-off-by: Prasanna Mumbai <prasanna.mumbai@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <jbottomley@parallels.com>
-rw-r--r--drivers/scsi/qla4xxx/ql4_isr.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index 67d6651cdb36..0e72921c752d 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -25,9 +25,14 @@ static void qla4xxx_copy_sense(struct scsi_qla_host *ha,
memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
sense_len = le16_to_cpu(sts_entry->senseDataByteCnt);
- if (sense_len == 0)
+ if (sense_len == 0) {
+ DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%d:%d: %s:"
+ " sense len 0\n", ha->host_no,
+ cmd->device->channel, cmd->device->id,
+ cmd->device->lun, __func__));
+ ha->status_srb = NULL;
return;
-
+ }
/* Save total available sense length,
* not to exceed cmd's sense buffer size */
sense_len = min_t(uint16_t, sense_len, SCSI_SENSE_BUFFERSIZE);