* PATCH [2/18] qla2xxx: Correct residual counts
@ 2004-06-22 5:49 Andrew Vasquez
2004-06-22 7:06 ` Arjan van de Ven
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Vasquez @ 2004-06-22 5:49 UTC (permalink / raw)
To: SCSI Mailing List, James Bottomley
ChangeSet
1.1838 04/06/03 15:24:43 andrew.vasquez@apc.qlogic.com +2 -0
Problem reported/corrected by Tony Battersby [tonyb@cybernetics.com]:
o The qla2xxx driver calculates data transfer residuals
for some but not all circumstances. The patch below
adds data transfer residual calculations for the
remaining cases.
o Interrogate the proper cmnd[] array when determining
the transfer direction.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
drivers/scsi/qla2xxx/qla_iocb.c | 2 +-
drivers/scsi/qla2xxx/qla_isr.c | 13 ++++++++++---
2 files changed, 11 insertions(+), 4 deletions(-)
diff -Nru a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
--- a/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-21 15:36:37 -07:00
+++ b/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-21 15:36:37 -07:00
@@ -43,7 +43,7 @@
else if (cmd->sc_data_direction == DMA_FROM_DEVICE)
cflags = CF_READ;
else {
- switch (cmd->data_cmnd[0]) {
+ switch (cmd->cmnd[0]) {
case WRITE_6:
case WRITE_10:
case WRITE_12:
diff -Nru a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
--- a/drivers/scsi/qla2xxx/qla_isr.c 2004-06-21 15:36:37 -07:00
+++ b/drivers/scsi/qla2xxx/qla_isr.c 2004-06-21 15:36:37 -07:00
@@ -827,7 +827,7 @@
uint16_t comp_status;
uint16_t scsi_status;
uint8_t lscsi_status;
- uint32_t resid;
+ int32_t resid;
uint8_t sense_sz = 0;
uint16_t rsp_info_len;
@@ -948,6 +948,11 @@
cp->result = DID_OK << 16;
break;
}
+ if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) {
+ resid = le32_to_cpu(pkt->residual_length);
+ cp->resid = resid;
+ CMD_RESID_LEN(cp) = resid;
+ }
if (lscsi_status == SS_BUSY_CONDITION) {
cp->result = DID_BUS_BUSY << 16 | lscsi_status;
break;
@@ -1009,7 +1014,10 @@
ha->host_no, t, l, comp_status, scsi_status));
resid = le32_to_cpu(pkt->residual_length);
- CMD_RESID_LEN(cp) = resid;
+ if (scsi_status & SS_RESIDUAL_UNDER) {
+ cp->resid = resid;
+ CMD_RESID_LEN(cp) = resid;
+ }
/*
* Check to see if SCSI Status is non zero. If so report SCSI
@@ -1085,7 +1093,6 @@
}
/* Handle mid-layer underflow */
- cp->resid = resid;
if ((unsigned)(cp->request_bufflen - resid) <
cp->underflow) {
qla_printk(KERN_INFO, ha,
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: PATCH [2/18] qla2xxx: Correct residual counts
@ 2004-06-22 14:17 Andrew Vasquez
0 siblings, 0 replies; 3+ messages in thread
From: Andrew Vasquez @ 2004-06-22 14:17 UTC (permalink / raw)
To: arjanv; +Cc: SCSI Mailing List, James Bottomley
On Tuesday, June 22, 2004 12:07 AM, Arjan van de Ven wrote:
> On Tue, 2004-06-22 at 07:49, Andrew Vasquez wrote:
>
> > diff -Nru a/drivers/scsi/qla2xxx/qla_iocb.c
> b/drivers/scsi/qla2xxx/qla_iocb.c
> > --- a/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-21 15:36:37 -07:00
> > +++ b/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-21 15:36:37 -07:00 @@
> > -43,7 +43,7 @@ else if (cmd->sc_data_direction ==
> > DMA_FROM_DEVICE) cflags = CF_READ; else {
> > - switch (cmd->data_cmnd[0]) {
> > + switch (cmd->cmnd[0]) {
> > case WRITE_6:
> > case WRITE_10:
> > case WRITE_12:
>
> this sounds wrong.
>
Yes, it is _wrong_! This code is baggage left behind from earlier
drivers when we were 'asked' to work around certain applications'
inability to properly construct commands.
> Is there any reason qlogic drivers can't use/trust the midlayer
> instead of doing qla2x00_get_cmd_direction() to reverse engineer to
> direction ??
Sure. Especially considering an earlier thread:
http://marc.theaimsgroup.com/?t=108727983000002&r=1&w=2
Regards,
Andrew Vasquez
===== drivers/scsi/qla2xxx/qla_iocb.c 1.9 vs edited =====
--- 1.9/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-03 15:44:16 -07:00
+++ edited/drivers/scsi/qla2xxx/qla_iocb.c 2004-06-22 07:11:11 -07:00
@@ -42,28 +42,6 @@
cflags = CF_WRITE;
else if (cmd->sc_data_direction == DMA_FROM_DEVICE)
cflags = CF_READ;
- else {
- switch (cmd->cmnd[0]) {
- case WRITE_6:
- case WRITE_10:
- case WRITE_12:
- case WRITE_BUFFER:
- case WRITE_LONG:
- case WRITE_SAME:
- case WRITE_VERIFY:
- case WRITE_VERIFY_12:
- case FORMAT_UNIT:
- case SEND_VOLUME_TAG:
- case MODE_SELECT:
- case SEND_DIAGNOSTIC:
- case MODE_SELECT_10:
- cflags = CF_WRITE;
- break;
- default:
- cflags = CF_READ;
- break;
- }
- }
return (cflags);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-06-22 14:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-22 5:49 PATCH [2/18] qla2xxx: Correct residual counts Andrew Vasquez
2004-06-22 7:06 ` Arjan van de Ven
-- strict thread matches above, loose matches on Subject: below --
2004-06-22 14:17 Andrew Vasquez
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox