From: "Martin K. Petersen" <martin.petersen@xxxxxxxxxx> Now that drives with support for queued trim are starting to appear, it would be helpful to expose the chosen trim mode to userland. Create a sysfs "trim" attribute for each ata_device that displays whether trim is "unsupported", "unqueued" or "queued". Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx> Cc: Chris Samuel <chris@xxxxxxxxxxx> Cc: Marc MERLIN <marc@xxxxxxxxxxx> --- drivers/ata/libata-transport.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c index e37413228228..a9a1a9055a3a 100644 --- a/drivers/ata/libata-transport.c +++ b/drivers/ata/libata-transport.c @@ -559,6 +559,37 @@ show_ata_dev_gscr(struct device *dev, static DEVICE_ATTR(gscr, S_IRUGO, show_ata_dev_gscr, NULL); +enum { + ATA_TRIM_UNSUPPORTED = 0, + ATA_TRIM_UNQUEUED = 1, + ATA_TRIM_QUEUED = 2, +}; + +static const char *trim_mode[] = { + [ATA_TRIM_UNSUPPORTED] = "unsupported", + [ATA_TRIM_UNQUEUED] = "unqueued", + [ATA_TRIM_QUEUED] = "queued", +}; + +static ssize_t +show_ata_dev_trim(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct ata_device *ata_dev = transport_class_to_dev(dev); + unsigned int mode; + + if (!ata_id_has_trim(ata_dev->id)) + mode = ATA_TRIM_UNSUPPORTED; + else if (ata_fpdma_dsm_supported(ata_dev)) + mode = ATA_TRIM_QUEUED; + else + mode = ATA_TRIM_UNQUEUED; + + return snprintf(buf, 20, "%s\n", trim_mode[mode]); +} + +static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL); + static DECLARE_TRANSPORT_CLASS(ata_dev_class, "ata_device", NULL, NULL, NULL); @@ -732,6 +763,7 @@ struct scsi_transport_template *ata_attach_transport(void) SETUP_DEV_ATTRIBUTE(ering); SETUP_DEV_ATTRIBUTE(id); SETUP_DEV_ATTRIBUTE(gscr); + SETUP_DEV_ATTRIBUTE(trim); BUG_ON(count > ATA_DEV_ATTRS); i->dev_attrs[count] = NULL; -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html