ide-scsi data transfer residuals

3 messages, 3 authors, 2002-07-16 · open the first message on its own page

ide-scsi data transfer residuals

From: Tony Battersby <hidden>
Date: 2002-07-05 14:07:49

Hello,

I am using the scsi-generic and ide-scsi drivers together for low-level
access to an IDE tape drive (vanilla 2.4.17).  I noticed that the data
transfer residual in sg_io_hdr_t { int resid; } is always zero.  I assume
that the residual calculation is just a missing feature from the ide-scsi
driver.  Does anyone know how hard it is to add it?

Please CC me in any replies.

Thanks,
Anthony J. Battersby
Cybernetics

Re: ide-scsi data transfer residuals

From: Douglas Gilbert <hidden>
Date: 2002-07-06 02:10:01

Tony Battersby wrote:
Hello,

I am using the scsi-generic and ide-scsi drivers together for low-level
access to an IDE tape drive (vanilla 2.4.17).  I noticed that the data
transfer residual in sg_io_hdr_t { int resid; } is always zero.  I assume
that the residual calculation is just a missing feature from the ide-scsi
driver.  Does anyone know how hard it is to add it?
Tony,
Support for the residual count is optional. A inaccurate
survey shows these adapter drivers support it:
  advansys
  aha152x
  aic7xxx_old  (but not the newer aic7xxx)
  dc395x_trm
  scsiiom
  sym53c8xx
  sym53c8xx_2

I do not know how the ide-scsi driver would get the information.
However here is the calculation it should do:
  Scsi_Cmnd::resid = Scsi_Cmnd::bufflen - <actual_bytes_transferred>

Of the drivers that support "resid" most given a scatter
gather list will use the sum of the element lengths instead
of bufflen. Unfortunately that sum can be larger the bufflen 
due to padding and alignment requirements of the most backward
DMA engines out there (I was burnt by the aha1542 ISA card).
IOW HBA driver writers, please use bufflen. Perhaps the CAM
name of "dxfer_len" would be clearer for this field.

Doug Gilbert

Re: ide-scsi data transfer residuals

From: Luben Tuikov <hidden>
Date: 2002-07-16 18:00:53

Douglas Gilbert wrote:
Of the drivers that support "resid" most given a scatter
gather list will use the sum of the element lengths instead
of bufflen. Unfortunately that sum can be larger the bufflen
due to padding and alignment requirements of the most backward
DMA engines out there (I was burnt by the aha1542 ISA card).
And aic7xxx ``supports'' only that kind of ``residual'' ONLY
for SCSI READ, but is seems to use scsi_cmnd::bufflen for SCSI
WRITE.

Anyway, I consider this a bug as all data was read after a READ but by
setting scsi_cmd::resid in the low-level device driver (aic7xxx)
nothing works (fs layer)...
IOW HBA driver writers, please use bufflen.
This message should probably be put somewhere right in
scsi_cmnd definition.

-- 
Luben
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help