aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-eh.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index dae2174f3877..7a2e54e92164 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2184,25 +2184,32 @@ int ata_eh_reset(struct ata_link *link, int classify,
2184 "follow-up softreset required " 2184 "follow-up softreset required "
2185 "but no softreset avaliable\n"); 2185 "but no softreset avaliable\n");
2186 rc = -EINVAL; 2186 rc = -EINVAL;
2187 goto out; 2187 goto fail;
2188 } 2188 }
2189 2189
2190 ata_eh_about_to_do(link, NULL, ATA_EH_RESET_MASK); 2190 ata_eh_about_to_do(link, NULL, ATA_EH_RESET_MASK);
2191 rc = ata_do_reset(link, reset, classes, deadline); 2191 rc = ata_do_reset(link, reset, classes, deadline);
2192
2193 if (rc == 0 && classify && classes[0] == ATA_DEV_UNKNOWN &&
2194 !(lflags & ATA_LFLAG_ASSUME_CLASS)) {
2195 ata_link_printk(link, KERN_ERR,
2196 "classification failed\n");
2197 rc = -EINVAL;
2198 goto out;
2199 }
2200 } 2192 }
2201 2193
2202 /* -EAGAIN can happen if we skipped followup SRST */ 2194 /* -EAGAIN can happen if we skipped followup SRST */
2203 if (rc && rc != -EAGAIN) 2195 if (rc && rc != -EAGAIN)
2204 goto fail; 2196 goto fail;
2205 2197
2198 /* was classification successful? */
2199 if (classify && classes[0] == ATA_DEV_UNKNOWN &&
2200 !(lflags & ATA_LFLAG_ASSUME_CLASS)) {
2201 if (try < max_tries) {
2202 ata_link_printk(link, KERN_WARNING,
2203 "classification failed\n");
2204 rc = -EINVAL;
2205 goto fail;
2206 }
2207
2208 ata_link_printk(link, KERN_WARNING,
2209 "classfication failed, assuming ATA\n");
2210 lflags |= ATA_LFLAG_ASSUME_ATA;
2211 }
2212
2206 ata_link_for_each_dev(dev, link) { 2213 ata_link_for_each_dev(dev, link) {
2207 /* After the reset, the device state is PIO 0 and the 2214 /* After the reset, the device state is PIO 0 and the
2208 * controller state is undefined. Reset also wakes up 2215 * controller state is undefined. Reset also wakes up