[3.19.y-ckt stable] Patch "libata: add ATA_HORKAGE_NOTRIM" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Thu Aug 27 22:07:50 UTC 2015


This is a note to let you know that I have just added a patch titled

    libata: add ATA_HORKAGE_NOTRIM

to the linux-3.19.y-queue branch of the 3.19.y-ckt extended stable tree 
which can be found at:

    http://kernel.ubuntu.com/git/ubuntu/linux.git/log/?h=linux-3.19.y-queue

This patch is scheduled to be released in version 3.19.8-ckt6.

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.19.y-ckt tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Kamal

------

>From e8a45305df6964acf2ce82f9b7c2874ec8705a91 Mon Sep 17 00:00:00 2001
From: Arne Fitzenreiter <arne_f at ipfire.org>
Date: Wed, 15 Jul 2015 13:54:36 +0200
Subject: libata: add ATA_HORKAGE_NOTRIM

commit 71d126fd28de2d4d9b7b2088dbccd7ca62fad6e0 upstream.

Some devices lose data on TRIM whether queued or not.  This patch adds
a horkage to disable TRIM.

tj: Collapsed unnecessary if() nesting.

Signed-off-by: Arne Fitzenreiter <arne_f at ipfire.org>
Signed-off-by: Tejun Heo <tj at kernel.org>
[ kamal: backport to 3.19-stable: no show_ata_dev_trim(); context ]
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
 drivers/ata/libata-scsi.c | 3 ++-
 include/linux/libata.h    | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 6abd17a..d13d49f 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -2531,7 +2531,8 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
 		rbuf[14] = (lowest_aligned >> 8) & 0x3f;
 		rbuf[15] = lowest_aligned;

-		if (ata_id_has_trim(args->id)) {
+		if (ata_id_has_trim(args->id) &&
+		    !(dev->horkage & ATA_HORKAGE_NOTRIM)) {
 			rbuf[14] |= 0x80; /* LBPME */

 			if (ata_id_has_zero_after_trim(args->id) &&
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 29284b6..0009fae 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -431,6 +431,8 @@ enum {
 	ATA_HORKAGE_NOLPM	= (1 << 20),	/* don't use LPM */
 	ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21),	/* some WDs have broken LPM */
 	ATA_HORKAGE_ZERO_AFTER_TRIM = (1 << 22),/* guarantees zero after trim */
+	ATA_HORKAGE_NOTRIM	= (1 << 24),	/* don't use TRIM */
+

 	 /* DMA mask for user DMA control: User visible values; DO NOT
 	    renumber */
--
1.9.1





More information about the kernel-team mailing list