Add patch to avoid using queued trim on M500 SSD (rhbz 1024002)
This commit is contained in:
parent
e9c184ed46
commit
697a9f6954
|
@ -760,6 +760,9 @@ Patch25175: KVM-Improve-create-VCPU-parameter.patch
|
|||
#rhbz 1025770
|
||||
Patch25176: br-fix-use-of-rx_handler_data-in-code-executed-on-no.patch
|
||||
|
||||
#rhbz 1024002
|
||||
Patch25177: libata-implement-ATA_HORKAGE_NO_NCQ_TRIM-and-apply-it-to-Micro-M500-SSDs.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1475,6 +1478,9 @@ ApplyPatch KVM-Improve-create-VCPU-parameter.patch
|
|||
#rhbz 1025770
|
||||
ApplyPatch br-fix-use-of-rx_handler_data-in-code-executed-on-no.patch
|
||||
|
||||
#rhbz 1024002
|
||||
ApplyPatch libata-implement-ATA_HORKAGE_NO_NCQ_TRIM-and-apply-it-to-Micro-M500-SSDs.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2277,6 +2283,9 @@ fi
|
|||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Tue Dec 17 2013 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Add patch to avoid using queued trim on M500 SSD (rhbz 1024002)
|
||||
|
||||
* Mon Dec 16 2013 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Fix host lockup in bridge code when starting from virt guest (rhbz 1025770)
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
Bugzilla: 1024002
|
||||
Upstream-status: Should hit 3.13 and CC'd to 3.12 stable
|
||||
|
||||
From f78dea064c5f7de07de4912a6e5136dbc443d614 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Carino <marc.ceeeee@gmail.com>
|
||||
Date: Tue, 17 Dec 2013 02:15:53 +0000
|
||||
Subject: libata: implement ATA_HORKAGE_NO_NCQ_TRIM and apply it to Micro M500 SSDs
|
||||
|
||||
Certain drives cannot handle queued TRIM commands properly, even
|
||||
though support is indicated in the IDENTIFY DEVICE buffer. This patch
|
||||
allows for disabling the commands for the affected drives and apply it
|
||||
to the Micron/Crucial M500 SSDs which exhibit incorrect protocol
|
||||
behavior when issued queued TRIM commands, which could lead to silent
|
||||
data corruption.
|
||||
|
||||
tj: Merged two unnecessarily split patches and made minor edits
|
||||
including shortening horkage name.
|
||||
|
||||
Signed-off-by: Marc Carino <marc.ceeeee@gmail.com>
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Link: http://lkml.kernel.org/g/1387246554-7311-1-git-send-email-marc.ceeeee@gmail.com
|
||||
Cc: stable@vger.kernel.org # 3.12+
|
||||
---
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index ff01584..1393a58 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -2149,9 +2149,16 @@ static int ata_dev_config_ncq(struct ata_device *dev,
|
||||
"failed to get NCQ Send/Recv Log Emask 0x%x\n",
|
||||
err_mask);
|
||||
} else {
|
||||
+ u8 *cmds = dev->ncq_send_recv_cmds;
|
||||
+
|
||||
dev->flags |= ATA_DFLAG_NCQ_SEND_RECV;
|
||||
- memcpy(dev->ncq_send_recv_cmds, ap->sector_buf,
|
||||
- ATA_LOG_NCQ_SEND_RECV_SIZE);
|
||||
+ memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE);
|
||||
+
|
||||
+ if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) {
|
||||
+ ata_dev_dbg(dev, "disabling queued TRIM support\n");
|
||||
+ cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &=
|
||||
+ ~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4205,6 +4212,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
{ "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
|
||||
+ /* devices that don't properly handle queued TRIM commands */
|
||||
+ { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
||||
+ { "Crucial_CT???M500SSD1", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
||||
+
|
||||
/* End Marker */
|
||||
{ }
|
||||
};
|
||||
diff --git a/include/linux/libata.h b/include/linux/libata.h
|
||||
index 0e23c26..9b50337 100644
|
||||
--- a/include/linux/libata.h
|
||||
+++ b/include/linux/libata.h
|
||||
@@ -418,6 +418,7 @@ enum {
|
||||
ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */
|
||||
ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */
|
||||
ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */
|
||||
+ ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */
|
||||
|
||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||
renumber */
|
||||
--
|
||||
cgit v0.9.2
|
Loading…
Reference in New Issue