Thread (24 messages) 24 messages, 5 authors, 2017-03-30

Re: support ranges TRIM for libata

From: Christoph Hellwig <hch@lst.de>
Date: 2017-03-23 13:55:21
Also in: linux-ide, linux-scsi

On Thu, Mar 23, 2017 at 09:47:41AM -0400, James Bottomley wrote:
quoted
The current implementation already has the issue of that it does
corrupt user data reliably if the using SG_IO for WRITE SAME
commands.
That does need fixing.
I don't think it's fixable as long as we translate the data payload.
Why can't we do what the t10 sat document recommends: if the ATA device
doesn't support the XL version (32 bit ranges) then translate unmap to
multiple non-XL commands?
Because libata sits underneath the tag allocator we'd getting into
a giant set of problems.  Where do you expect the new commands to
magically come from?  And adhere to the queueing limits and not actually
deadlock in one way or another?
I don't necessarily object to the vendor specific 1<->1 approach, it's
just it won't fix the problem you cited above (SG_IO WRITE SAME), its
just that now we error the command, which may cause some surprise.
We now error WRITE SAME for passthrough consistently.  Before we only
accepted it only with the unmap bit set, and even did so incorrectly
(not checking that the payload was all zeros).
I
also wonder if we couldn't simply do an ATA_16 TRIM if we're already
going to all the trouble of recognising ATA devices in the sd discard
path?
We probably could do that as well.  But that would drag a lot more
ATA-specific code into sd.c than just formatting the ranges.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help