Skip to contentSkip to conversation

Is scsi_cmnd::underflow still useful?

DISCUSSION Douglas Gilbert 3 participants 4 messages Jul 12, 2004 – Jul 13, 2004 SCSI

lore
Share & tools
lore
#0 lore raw

Doesn't look like many LLDs act on scsi_cmnd::underflow. Seems to me that scsi_cmnd::resid is a more general replacement.

Comments?

Doug Gilbert

#1 lore raw
Quoted 3 lines · Douglas Gilbert

Doesn't look like many LLDs act on scsi_cmnd::underflow. Seems to me that scsi_cmnd::resid is a more general replacement.

well, I know I suggested a recent use of it to the USB people , so I don't think it's entirely unused. resid can't be a replacement because they mean different things:

resid - number of bytes left over after a transaction underflow - driver must return error if less than this amount transferred.

James

#2 lore raw
Quoted 5 lines · James Bottomley
Quoted 3 lines · Douglas Gilbert

Doesn't look like many LLDs act on scsi_cmnd::underflow. Seems to me that scsi_cmnd::resid is a more general replacement.

Quoted 7 lines

well, I know I suggested a recent use of it to the USB people , so I don't think it's entirely unused. resid can't be a replacement because they mean different things:

resid - number of bytes left over after a transaction underflow - driver must return error if less than this amount transferred.

I think the recent USB usage of it was because some mid-level drivers look for the error condition related to the underflow value.

We don't really use it, other than to trigger an error.

Matt

Signature · 6 lines
Matthew Dharm                              Home: [email protected] 
Maintainer, Linux USB Mass Storage Driver

Stef, you just got beaten by a ball of DIRT.
					-- Greg
User Friendly, 12/7/1997
#3 lore raw
In reply to James Bottomley
Quoted 7 lines · James Bottomley
Quoted 3 lines · Douglas Gilbert

Doesn't look like many LLDs act on scsi_cmnd::underflow. Seems to me that scsi_cmnd::resid is a more general replacement.

Quoted 7 lines

well, I know I suggested a recent use of it to the USB people , so I don't think it's entirely unused. resid can't be a replacement because they mean different things:

resid - number of bytes left over after a transaction underflow - driver must return error if less than this amount transferred.

James,
Here is a code snippet from one of the few LLDs that acts on scsi_cmnd::underflow: qla2xxx/qla_isr.c . It shows the relationship between request_buflen, resid and underflow:

   if ((unsigned)(cp->request_bufflen - resid) <
                  cp->underflow) {
       qla_printk(KERN_INFO, ha,
                  "scsi(%ld:%d:%d:%d): Mid-layer underflow "
                  "detected (%x of %x bytes)...returning "
                  "error status.\n",
                  ha->host_no, b, t, l, resid,
                  cp->request_bufflen);
                  cp->result = DID_ERROR << 16;
                  break;
    }

Rather than ask the LLD report an error (and leave the upper layers wondering if any data was sent or received) wouldn't it be better to allow the issuer of the scsi_cmnd object to decide whether the response was deficient (based on resid)?

I am responsible for resid being added (in the lk 2.3 series) at the prompting of Joerg Schilling. The scsi_cmnd::underflow parameter was not of use to him, even if I exposed it to applications via sg_io_hdr. resid is a "steal" from CAM and the only complaints I have received about it are concerning LLDs that do _not_ implement it.

Doug Gilbert