From: Douglas Gilbert <dgilbert@interlog.com>
To: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
Cc: linux-iscsi-target-dev@googlegroups.com,
linux-scsi <linux-scsi@vger.kernel.org>,
Christoph Hellwig <hch@lst.de>
Subject: Re: Expected payload size for WRITE_SAME_16?
Date: Mon, 09 May 2011 14:53:11 -0400 [thread overview]
Message-ID: <4DC83817.5060906@interlog.com> (raw)
In-Reply-To: <1304729895.10072.475.camel@haakon2.linux-iscsi.org>
On 11-05-06 08:58 PM, Nicholas A. Bellinger wrote:
> On Wed, 2011-05-04 at 10:58 -0700, Chris Greiveldinger wrote:
>> Hello again,
>>
>
> Hi Chris,
>
>> From sbc3r25: "The WRITE SAME (16) command (see table 112) requests
>> that the device server transfer a single logical block from the data-out
>> buffer." The code for WRITE_SAME_16 in
>> target_core_transport.c:transport_generic_cmd_sequencer() calculates the
>> expected size to be sectors * block size (via transport_get_size), which
>> I expect is too large if sectors is greater than one.
>
> Not exactly..
>
> We use the per CDB 'size = transport_get_size()' assignment with
> WRITE_SAME_16+UNMAP=1 in transport_generic_cmd_sequencer() to compare
> the SCSI CDB level expected data transfer length (size) against the
> fabric dependent expected transfer length (struct se_cmd->data_length)
> at the bottom of transport_generic_cmd_sequencer().
>
> The value in se_cmd->data_length is then used to determine the 'range'
> and makes the backend calls via:
>
> target_core_cdb.c:target_emulate_write_same()
> dev->transport->do_discard() ->
> target_core_iblock.c:iblock_do_discard() ->
> block/blk-lib.c:blkdev_issue_discard()
>
>
>> Since the sg3_utils sg_write_same utility allows me to specify the the payload
>> size, I can issue a command that has the payload length that
>> transport_generic_cmd_sequencer() expects, but I'm not sure what the
>> correct size should be.
>>
>
> It was my understanding that you need to match the sg_write_same
> parameters of --num and --xferlen depending on the SCSI block_size (512)
> used for the SCSI devices:
>
> sg_write_same -S --unmap --in=/dev/zero --lba=10 --num=1
> --xferlen=512 /dev/sdd
>
> sg_write_same -S --unmap --in=/dev/zero --lba=10 --num=100
> --xferlen=51200 /dev/sdd
No, it should be '--xferlen=512' in both cases or simply
don't give that option. If it is not given then the READ
CAPACITY response is consulted to read the 'Logical block
length in bytes' field which I guess will be 512 in the
cases you are looking at.
Perhaps 'man sg_write_same' needs some examples (or just
needs to be read ...).
> Note that sg_write_same does check --xferlen against a hardcoded max of
> 64k, which is obviously somewhat limiting.
The 64Kb limit is the biggest block size that sg_write_same
can handle. I'm not aware that is a practical restriction yet.
Doug Gilbert
>> Am I wrong in my interpretation of the WRITE_SAME(16) command, or is
>> this a bug in transport_generic_cmd_sequencer()?
>>
>
> So the above case --num> 0 case things should still be working as
> expected with recent upstream LIO code and your last Reported-by: patch,
> but there does appear to be an issue with the --num=0 case being
> rejected by the write underflow/overflow check inside
> transport_generic_cmd_sequencer().
>
> I will send out a patch shortly against lio-4.1 for you to test that
> makes the sg_write_same --unmap + --num=0 case work again (Christoph
> CC'ed and linux-scsi CC'ed).
>
> Thanks for your review!
>
> --nab
>
>
prev parent reply other threads:[~2011-05-09 19:00 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4DC193C0.8090401@rnanetworks.com>
2011-05-07 0:58 ` Expected payload size for WRITE_SAME_16? Nicholas A. Bellinger
2011-05-09 18:53 ` Douglas Gilbert [this message]
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=4DC83817.5060906@interlog.com \
--to=dgilbert@interlog.com \
--cc=hch@lst.de \
--cc=linux-iscsi-target-dev@googlegroups.com \
--cc=linux-scsi@vger.kernel.org \
--cc=nab@linux-iscsi.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.