diff options
Diffstat (limited to 'drivers/ata/libata-core.c')
| -rw-r--r-- | drivers/ata/libata-core.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 943cc8b83e59..18d97d5c7d90 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -4224,10 +4224,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
| 4224 | { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, | 4224 | { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, |
| 4225 | 4225 | ||
| 4226 | /* devices that don't properly handle queued TRIM commands */ | 4226 | /* devices that don't properly handle queued TRIM commands */ |
| 4227 | { "Micron_M500*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, }, | 4227 | { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, |
| 4228 | { "Crucial_CT???M500SSD*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, }, | 4228 | { "Crucial_CT???M500SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, |
| 4229 | { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, | 4229 | { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, |
| 4230 | { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, | 4230 | { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, }, |
| 4231 | 4231 | ||
| 4232 | /* | 4232 | /* |
| 4233 | * Some WD SATA-I drives spin up and down erratically when the link | 4233 | * Some WD SATA-I drives spin up and down erratically when the link |
| @@ -6314,6 +6314,8 @@ int ata_host_activate(struct ata_host *host, int irq, | |||
| 6314 | static void ata_port_detach(struct ata_port *ap) | 6314 | static void ata_port_detach(struct ata_port *ap) |
| 6315 | { | 6315 | { |
| 6316 | unsigned long flags; | 6316 | unsigned long flags; |
| 6317 | struct ata_link *link; | ||
| 6318 | struct ata_device *dev; | ||
| 6317 | 6319 | ||
| 6318 | if (!ap->ops->error_handler) | 6320 | if (!ap->ops->error_handler) |
| 6319 | goto skip_eh; | 6321 | goto skip_eh; |
| @@ -6333,6 +6335,13 @@ static void ata_port_detach(struct ata_port *ap) | |||
| 6333 | cancel_delayed_work_sync(&ap->hotplug_task); | 6335 | cancel_delayed_work_sync(&ap->hotplug_task); |
| 6334 | 6336 | ||
| 6335 | skip_eh: | 6337 | skip_eh: |
| 6338 | /* clean up zpodd on port removal */ | ||
| 6339 | ata_for_each_link(link, ap, HOST_FIRST) { | ||
| 6340 | ata_for_each_dev(dev, link, ALL) { | ||
| 6341 | if (zpodd_dev_enabled(dev)) | ||
| 6342 | zpodd_exit(dev); | ||
| 6343 | } | ||
| 6344 | } | ||
| 6336 | if (ap->pmp_link) { | 6345 | if (ap->pmp_link) { |
| 6337 | int i; | 6346 | int i; |
| 6338 | for (i = 0; i < SATA_PMP_MAX_PORTS; i++) | 6347 | for (i = 0; i < SATA_PMP_MAX_PORTS; i++) |
