Linux SCSI subsystem development
 help / color / mirror / Atom feed
From: Niklas Cassel <cassel@kernel.org>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: "James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	"Martin K. Petersen" <mkp@kernel.org>,
	linux-scsi@vger.kernel.org, John Garry <john.garry@linux.dev>
Subject: Re: [PATCH v9 05/11] scsi: scsi_debug: Report the residual of a write
Date: Mon, 28 Sep 2026 09:15:09 +0200	[thread overview]
Message-ID: <aroT_W6PzdiUeUBd@ryzen> (raw)
In-Reply-To: <1dac66aa-a4e6-4c79-a914-d5d2699c392f@kernel.org>

On Mon, Sep 28, 2026 at 08:45:30AM +0200, Damien Le Moal wrote:
> On 2026/09/27 7:26, Niklas Cassel wrote:
> > A write whose data buffer is larger than its transfer length leaves a
> > residual that the initiator is entitled to be told about. resp_read_dt0()
> > and resp_write_tape() report it, but the write paths for a disk do not,
> > so such a write completes with GOOD status and a residual of zero while
> > a READ of the same length into the same buffer reports it correctly.
>
> I am not convinced this is correct. resid (residual count) is supposed to
> indicate the amount of data that was *not* transferred. So if the buffer size is
> larger that the command cdb transfer count, all data can be transferred and
> resid should be 0. Which would mean that for this case, the write processing is
> correct but the read side is not.
>
> The SBC and SPC specs are very silent about this though, I do not think that the
> resid is actually standardized. And I do not see a clear definition for it in
> the documentation/code comments.

The definition is in Documentation/scsi/scsi_mid_low_api.rst,
under resid_len: "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".

Also in include/scsi/sg.h: "resid; /* [o] dxfer_len - actual_transferred */".

Both measure it against the buffer, not the CDB.

That is also what iSCSI reports: RFC 7143 11.4.5.1 measures the residual
against the Expected Data Transfer Length, which the initiator sets from the
buffer.

And it is what scsi_debug has always done for reads, in fill_from_dev_buffer().
This patch just does the same for writes.


Let me clarify the commit message in v10 to actually reference
Documentation/scsi/scsi_mid_low_api.rst.


Kind regards,
Niklas

  reply	other threads:[~2026-09-28  7:15 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-27  5:26 [PATCH v9 00/11] scsi: scsi_debug: fix zoned write validation Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 01/11] scsi: scsi_debug: Refuse a zoned device with a non-zero lowest aligned LBA Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 02/11] scsi: scsi_debug: Make atomic writes and ZBC emulation mutually exclusive Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 03/11] scsi: scsi_debug: Take the zone metadata lock before the data lock Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 04/11] scsi: scsi_debug: Evaluate scsi_debug_lbp() only once Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 05/11] scsi: scsi_debug: Report the residual of a write Niklas Cassel
2026-09-27  5:40   ` sashiko-bot
2026-09-27  7:01     ` Niklas Cassel
2026-09-28  6:45   ` Damien Le Moal
2026-09-28  7:15     ` Niklas Cassel [this message]
2026-09-28  7:51       ` Damien Le Moal
2026-09-28  8:15         ` Damien Le Moal
2026-09-27  5:26 ` [PATCH v9 06/11] scsi: scsi_debug: Enforce physical block alignment of zoned writes Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 07/11] scsi: scsi_debug: Do not write a partial physical block to a zoned device Niklas Cassel
2026-09-27  5:26 ` [PATCH v9 08/11] scsi: scsi_debug: Advance the write pointer over the data written Niklas Cassel
2026-09-27  5:27 ` [PATCH v9 09/11] scsi: scsi_debug: Refuse a short WRITE ATOMIC (16) before writing it Niklas Cassel
2026-09-27  5:27 ` [PATCH v9 10/11] scsi: scsi_debug: Map the region written by WRITE ATOMIC (16) Niklas Cassel
2026-09-27  5:27 ` [PATCH v9 11/11] scsi: scsi_debug: Validate the access parameters of " Niklas Cassel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aroT_W6PzdiUeUBd@ryzen \
    --to=cassel@kernel.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=dlemoal@kernel.org \
    --cc=john.garry@linux.dev \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mkp@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox