diff mbox series

[1/3] scsi: core: Fix the scsi_set_resid() documentation

Message ID 20230721160154.874010-2-bvanassche@acm.org
State New
Headers show
Series Fix residual handling in two SCSI LLDs | expand

Commit Message

Bart Van Assche July 21, 2023, 4:01 p.m. UTC
Because scsi_finish_command() subtracts the residual from the buffer
length, residual overflows must not be reported. Reflect this in the
SCSI documentation. See also commit 9237f04e12cc ("scsi: core: Fix
scsi_get/set_resid() interface")

Cc: Damien Le Moal <dlemoal@kernel.org>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Douglas Gilbert <dgilbert@interlog.com>
Cc: stable@vger.kernel.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 Documentation/scsi/scsi_mid_low_api.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Martin K. Petersen July 23, 2023, 8:36 p.m. UTC | #1
Bart,

> Because scsi_finish_command() subtracts the residual from the buffer
> length, residual overflows must not be reported. Reflect this in the
> SCSI documentation. See also commit 9237f04e12cc ("scsi: core: Fix
> scsi_get/set_resid() interface")

Applied to 6.6/scsi-staging, thanks!
Bart Van Assche Aug. 16, 2023, 11:43 p.m. UTC | #2
On 8/16/23 02:58, Benjamin Block wrote:
> On Fri, Jul 21, 2023 at 09:01:32AM -0700, Bart Van Assche wrote:
>> Because scsi_finish_command() subtracts the residual from the buffer
>> length, residual overflows must not be reported. Reflect this in the
>> SCSI documentation. See also commit 9237f04e12cc ("scsi: core: Fix
>> scsi_get/set_resid() interface")
>>
>> Cc: Damien Le Moal <dlemoal@kernel.org>
>> Cc: Hannes Reinecke <hare@suse.de>
>> Cc: Douglas Gilbert <dgilbert@interlog.com>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
>> ---
>>   Documentation/scsi/scsi_mid_low_api.rst | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/scsi/scsi_mid_low_api.rst b/Documentation/scsi/scsi_mid_low_api.rst
>> index 6fa3a6279501..022198c51350 100644
>> --- a/Documentation/scsi/scsi_mid_low_api.rst
>> +++ b/Documentation/scsi/scsi_mid_low_api.rst
>> @@ -1190,11 +1190,11 @@ Members of interest:
>>   		 - pointer to scsi_device object that this command is
>>                      associated with.
>>       resid
>> -		 - an LLD should set this signed integer to the requested
>> +		 - an LLD should set this unsigned integer to the requested
>>                      transfer length (i.e. 'request_bufflen') less the number
>>                      of bytes that are actually transferred. 'resid' is
>>                      preset to 0 so an LLD can ignore it if it cannot detect
>> -                   underruns (overruns should be rare). If possible an LLD
>> +                   underruns (overruns should not be reported). An LLD
> 
> I'm very late to party, sorry. But we have certainly seen at least one
> overrun reported some years ago on a FC SAN. We've changed some handling
> in zFCP due to that (
> a099b7b1fc1f ("scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path")
> ). The theory back than was, that it was cause by either a faulty ISL in
> the fabric, or some other "bit-errors" on the wire that caused some FC
> frames being dropped during transmit.
> 
> I added that we mark such commands with `DID_ERROR`, so they are
> retried, if that is permissible.
> 
>>                      should set 'resid' prior to invoking 'done'. The most
>>                      interesting case is data transfers from a SCSI target
>>                      device (e.g. READs) that underrun.
> 

Thanks, that's interesting feedback. Feel free to submit a patch that 
refines the scsi_set_resid() documentation further.

Bart.
diff mbox series

Patch

diff --git a/Documentation/scsi/scsi_mid_low_api.rst b/Documentation/scsi/scsi_mid_low_api.rst
index 6fa3a6279501..022198c51350 100644
--- a/Documentation/scsi/scsi_mid_low_api.rst
+++ b/Documentation/scsi/scsi_mid_low_api.rst
@@ -1190,11 +1190,11 @@  Members of interest:
 		 - pointer to scsi_device object that this command is
                    associated with.
     resid
-		 - an LLD should set this signed integer to the requested
+		 - an LLD should set this unsigned integer to the requested
                    transfer length (i.e. 'request_bufflen') less the number
                    of bytes that are actually transferred. 'resid' is
                    preset to 0 so an LLD can ignore it if it cannot detect
-                   underruns (overruns should be rare). If possible an LLD
+                   underruns (overruns should not be reported). An LLD
                    should set 'resid' prior to invoking 'done'. The most
                    interesting case is data transfers from a SCSI target
                    device (e.g. READs) that underrun.