Re: [PATCH] libata: add horkage for M88V29

From: Böszörményi Zoltán
Date: Thu Jun 23 2022 - 04:40:47 EST


2022. 06. 23. 10:38 keltezéssel, Böszörményi Zoltán írta:
2022. 06. 23. 10:22 keltezéssel, Damien Le Moal írta:
On 6/23/22 16:47, Böszörményi Zoltán wrote:
2022. 02. 08. 9:07 keltezéssel, Damien Le Moal írta:
On 2/4/22 21:57, zboszor@xxxxx wrote:
From: Zoltán Böszörményi <zboszor@xxxxxxxxx>

This device is a CF card, or possibly an SSD in CF form factor.
It supports NCQ and high speed DMA.

While it also advertises TRIM support, I/O errors are reported
when the discard mount option fstrim is used. TRIM also fails
when disabling NCQ and not just as an NCQ command.

TRIM must be disabled for this device.

Signed-off-by: Zoltán Böszörményi <zboszor@xxxxxxxxx>
---
   drivers/ata/libata-core.c | 1 +
   1 file changed, 1 insertion(+)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 67f88027680a..4a7f58fcc411 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4028,6 +4028,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
          /* devices that don't properly handle TRIM commands */
       { "SuperSSpeed S238*",        NULL, ATA_HORKAGE_NOTRIM, },
+    { "M88V29*",            NULL,    ATA_HORKAGE_NOTRIM, },
          /*
        * As defined, the DRAT (Deterministic Read After Trim) and RZAT
Applied to for-5.17-fixes. Thanks !
Thank you. However, I have second thoughts about this patch.
The device advertises this:

# hdparm -iI /dev/sda
...
   Enabled Supported
      *    Data Set Management TRIM supported (limit 1 block)
...

but the I/O failures always reported higher number of blocks,
IIRC the attempted number of block was 8 or so.

Can the kernel limit or split TRIM commands according to the
advertised limit? If not (or not yet) then the quirk is good for now.
Yes, the kernel does that. See the sysfs queue attributes
discard_max_bytes and discard_max_hw_bytes. What are the values for your
device ? I think that the "limit 1 block" indicated by hdparm is simply to
say that the DSM command (to trim the device) accept only at most a 1
block (512 B) list of sectors to trim. That is not the actual trim limit
for each sector range in that list.

With the quirk in effect (TRIM disabled) I have these:

[root@chef queue]# pwd
/sys/block/sda/queue
[root@chef queue]# cat discard_granularity
0
[root@chef queue]# cat discard_max_bytes
0
[root@chef queue]# cat discard_max_hw_bytes
0

And also this, which seems to match the sector limit:

[root@chef queue]# cat max_discard_segments
1



Best regards,
Zoltán Böszörményi