From: "Martin K. Petersen" <martin.petersen@oracle.com>
To: Tom Yan <tom.ty89@gmail.com>
Cc: Shaun Tancheff <shaun.tancheff@seagate.com>,
Shaun Tancheff <shaun@tancheff.com>,
linux-ide@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>, Christoph Hellwig <hch@lst.de>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Damien Le Moal <damien.lemoal@hgst.com>,
Hannes Reinecke <hare@suse.de>,
Josh Bingaman <josh.bingaman@seagate.com>,
Hannes Reinecke <hare@suse.com>
Subject: Re: [PATCH v6 1/4] libata: Safely overwrite attached page in WRITE SAME xlat
Date: Tue, 23 Aug 2016 23:33:39 -0400 [thread overview]
Message-ID: <yq1vayqdeng.fsf@sermon.lab.mkp.net> (raw)
In-Reply-To: <CAGnHSEn7M9Kmse+_JFFCgvZY5TqZt1TDzXGhKaqimog4OKiktg@mail.gmail.com> (Tom Yan's message of "Tue, 23 Aug 2016 07:53:57 +0000")
>>>>> "Tom" == Tom Yan <tom.ty89@gmail.com> writes:
Tom> Nope, SCSI Write Same commands does not have payload (or in SCSI
Tom> terms, parameter list / data-out buffer).
WRITE SAME has a a payload of 1 logical block (unless NDOB is set but we
have had no good reason to support that yet).
UNMAP has a payload that varies based on the number of range
descriptors. The SCSI disk driver only ever issues a single descriptor
but since libata doesn't support UNMAP this doesn't really come into
play.
Ideally there would be a way to distinguish between device limits for
WRITE SAME with the UNMAP bit and for "regular" WRITE SAME. One way to
do that would be to transition the libata discard implementation over to
single-range UNMAP, fill out the relevant VPD page B0 fields and leave
the WRITE SAME bits for writing zeroes.
One reason that has not been particularly compelling is that the WRITE
SAME payload buffer does double duty to hold the ATA DSM TRIM range
descriptors and matches the required ATA payload size. Whereas the UNMAP
command would only provide 24 bytes of TRIM range space.
Also, please be careful with transfer lengths, __data_len, etc. As
mentioned, the transfer length WRITE SAME is typically 512 bytes and
that's the number of bytes that need to be DMA'ed and transferred over
the wire by the controller. But from a command completion perspective we
need to complete however many bytes the command acted upon. Unlike reads
and writes there is not a 1:1 mapping between the transfer length and
the affected area. So we do a bit of magic after the buffer has been
mapped to ensure that the completion byte count matches the number of
blocks that were affected by the command rather than the size of the
data buffer in bytes.
--
Martin K. Petersen Oracle Linux Engineering
next prev parent reply other threads:[~2016-08-24 3:33 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-22 4:23 [PATCH v6 0/4] SCT Write Same Shaun Tancheff
2016-08-22 4:23 ` [PATCH v6 1/4] libata: Safely overwrite attached page in WRITE SAME xlat Shaun Tancheff
2016-08-22 6:27 ` Hannes Reinecke
2016-08-22 19:27 ` Tom Yan
2016-08-22 19:51 ` Shaun Tancheff
2016-08-22 20:12 ` Tom Yan
2016-08-22 21:20 ` Tom Yan
2016-08-22 22:00 ` Shaun Tancheff
2016-08-22 23:49 ` Tom Yan
2016-08-23 1:01 ` Shaun Tancheff
2016-08-23 5:26 ` Tom Yan
2016-08-23 6:20 ` Shaun Tancheff
2016-08-23 7:53 ` Tom Yan
2016-08-23 8:42 ` Shaun Tancheff
2016-08-23 9:04 ` Tom Yan
2016-08-24 3:33 ` Martin K. Petersen [this message]
2016-08-24 5:31 ` Tom Yan
2016-08-24 21:28 ` Shaun Tancheff
2016-08-25 6:31 ` Tom Yan
2016-08-25 7:18 ` Shaun Tancheff
2016-08-22 4:23 ` [PATCH v6 2/4] Add support for SCT Write Same Shaun Tancheff
2016-08-22 6:27 ` Hannes Reinecke
2016-08-22 19:20 ` Tom Yan
2016-08-22 19:43 ` Shaun Tancheff
2016-08-22 20:14 ` Tom Yan
2016-08-22 22:07 ` Shaun Tancheff
2016-08-22 23:09 ` Tom Yan
2016-08-23 0:36 ` Shaun Tancheff
2016-08-23 5:55 ` Tom Yan
2016-08-23 6:11 ` Shaun Tancheff
2016-08-23 7:57 ` Tom Yan
2016-08-23 10:37 ` Tom Yan
2016-08-23 10:56 ` Shaun Tancheff
2016-08-24 5:57 ` Tom Yan
2016-08-24 6:10 ` Tom Yan
2016-08-24 22:04 ` Shaun Tancheff
2016-08-25 6:23 ` Tom Yan
2016-08-25 7:31 ` Shaun Tancheff
2016-08-22 4:23 ` [PATCH v6 3/4] SCT Write Same / DSM Trim Shaun Tancheff
2016-08-22 6:30 ` Hannes Reinecke
2016-08-24 18:08 ` [PATCH v6 3/4 RESEND] " Shaun Tancheff
2016-08-25 7:01 ` Tom Yan
2016-08-25 8:03 ` Shaun Tancheff
2016-08-25 9:30 ` Tom Yan
2016-08-22 8:31 ` [PATCH v6 3/4] " Tom Yan
2016-08-22 8:33 ` Tom Yan
2016-08-22 15:04 ` Shaun Tancheff
2016-08-22 17:02 ` Tom Yan
2016-08-22 18:00 ` Shaun Tancheff
2016-08-22 18:52 ` Tom Yan
2016-08-22 20:57 ` Tom Yan
2016-08-22 4:23 ` [PATCH v6 4/4] SCT Write Same handle ATA_DFLAG_PIO Shaun Tancheff
2016-08-22 6:31 ` Hannes Reinecke
2016-08-22 6:32 ` [PATCH v6 0/4] SCT Write Same Hannes Reinecke
2016-08-25 15:28 ` Tejun Heo
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=yq1vayqdeng.fsf@sermon.lab.mkp.net \
--to=martin.petersen@oracle.com \
--cc=damien.lemoal@hgst.com \
--cc=hare@suse.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=josh.bingaman@seagate.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=shaun.tancheff@seagate.com \
--cc=shaun@tancheff.com \
--cc=tj@kernel.org \
--cc=tom.ty89@gmail.com \
/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