Message ID | 1436961277-4069-2-git-send-email-arne_f@ipfire.org |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
On Wed, Jul 15, 2015 at 01:54:36PM +0200, Arne Fitzenreiter wrote: > Some devices lose data on TRIM whether queued or not. This patch adds > a horkage to disable TRIM. > > Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org> > --- > drivers/ata/libata-scsi.c | 14 ++++++++------ > drivers/ata/libata-transport.c | 2 ++ > include/linux/libata.h | 2 ++ > 3 files changed, 12 insertions(+), 6 deletions(-) <formletter> This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read Documentation/stable_kernel_rules.txt for how to do this properly. </formletter> -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello. On 07/15/2015 02:54 PM, Arne Fitzenreiter wrote: > Some devices lose data on TRIM whether queued or not. This patch adds > a horkage to disable TRIM. > Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org> Sorry for not complaining about the below items earlier, perhaps Tejun could fix while appying? [...] > diff --git a/include/linux/libata.h b/include/linux/libata.h > index 36ce37b..5c8bac6 100644 > --- a/include/linux/libata.h > +++ b/include/linux/libata.h > @@ -431,6 +431,8 @@ enum { > 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_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */ > + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */ BTW, why not ATA_HORKAGE_NO_TRIM like the others? > + Empty line not needed here. MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello, On Wed, Jul 15, 2015 at 08:23:33PM +0300, Sergei Shtylyov wrote: > >@@ -431,6 +431,8 @@ enum { > > 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_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */ > >+ ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */ > > BTW, why not ATA_HORKAGE_NO_TRIM like the others? We actually have a bunch of NOXXX's. We prolly wanna clean them up together later but things like this ultimately don't really matter. > >+ > > Empty line not needed here. I removed it while merging a later patch. Thanks.
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 3131adc..cc80e4d 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -2569,12 +2569,14 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf) rbuf[15] = lowest_aligned; if (ata_id_has_trim(args->id)) { - rbuf[14] |= 0x80; /* LBPME */ - - if (ata_id_has_zero_after_trim(args->id) && - dev->horkage & ATA_HORKAGE_ZERO_AFTER_TRIM) { - ata_dev_info(dev, "Enabling discard_zeroes_data\n"); - rbuf[14] |= 0x40; /* LBPRZ */ + if (!(dev->horkage & ATA_HORKAGE_NOTRIM)) { + rbuf[14] |= 0x80; /* LBPME */ + + if (ata_id_has_zero_after_trim(args->id) && + dev->horkage & ATA_HORKAGE_ZERO_AFTER_TRIM) { + ata_dev_info(dev, "Enabling discard_zeroes_data\n"); + rbuf[14] |= 0x40; /* LBPRZ */ + } } } } diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c index d6c37bc..e2d9497 100644 --- a/drivers/ata/libata-transport.c +++ b/drivers/ata/libata-transport.c @@ -569,6 +569,8 @@ show_ata_dev_trim(struct device *dev, if (!ata_id_has_trim(ata_dev->id)) mode = "unsupported"; + else if (ata_dev->horkage & ATA_HORKAGE_NOTRIM) + mode = "forced_unsupported"; else if (ata_dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) mode = "forced_unqueued"; else if (ata_fpdma_dsm_supported(ata_dev)) diff --git a/include/linux/libata.h b/include/linux/libata.h index 36ce37b..5c8bac6 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -431,6 +431,8 @@ enum { 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_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */ + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */ + /* DMA mask for user DMA control: User visible values; DO NOT renumber */
Some devices lose data on TRIM whether queued or not. This patch adds a horkage to disable TRIM. Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org> --- drivers/ata/libata-scsi.c | 14 ++++++++------ drivers/ata/libata-transport.c | 2 ++ include/linux/libata.h | 2 ++ 3 files changed, 12 insertions(+), 6 deletions(-)