aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-eh.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2008-04-07 09:47:20 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-04-17 15:44:23 -0400
commit305d2a1ab137d11d573319c315748a87060fe82d (patch)
tree8dcf81b1742db21c6a745688de96a18944c83617 /drivers/ata/libata-eh.c
parent5958e3025fd9d97429163e074d9cfa3848f51f28 (diff)
libata: unify mechanism to request follow-up SRST
Previously, there were two ways to trigger follow-up SRST from hardreset method - returning -EAGAIN and leaving all device classes unmodified. Drivers never used the latter mechanism and the only use case for the former was when hardreset couldn't classify. Drop the latter mechanism and let -EAGAIN mean "perform follow-up SRST if classification is required". This change removes unnecessary follow-up SRSTs and simplifies reset implementations. Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r--drivers/ata/libata-eh.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index d8c4a45dcf26..4ec1397434c0 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2055,20 +2055,10 @@ static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
2055 if (rc) 2055 if (rc)
2056 return rc; 2056 return rc;
2057 2057
2058 /* If any class isn't ATA_DEV_UNKNOWN, consider classification 2058 /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */
2059 * is complete and convert all ATA_DEV_UNKNOWN to
2060 * ATA_DEV_NONE.
2061 */
2062 ata_link_for_each_dev(dev, link) 2059 ata_link_for_each_dev(dev, link)
2063 if (classes[dev->devno] != ATA_DEV_UNKNOWN) 2060 if (classes[dev->devno] == ATA_DEV_UNKNOWN)
2064 break; 2061 classes[dev->devno] = ATA_DEV_NONE;
2065
2066 if (dev) {
2067 ata_link_for_each_dev(dev, link) {
2068 if (classes[dev->devno] == ATA_DEV_UNKNOWN)
2069 classes[dev->devno] = ATA_DEV_NONE;
2070 }
2071 }
2072 2062
2073 return 0; 2063 return 0;
2074} 2064}
@@ -2079,15 +2069,15 @@ static int ata_eh_followup_srst_needed(struct ata_link *link,
2079{ 2069{
2080 if (link->flags & ATA_LFLAG_NO_SRST) 2070 if (link->flags & ATA_LFLAG_NO_SRST)
2081 return 0; 2071 return 0;
2082 if (rc == -EAGAIN) 2072 if (rc == -EAGAIN) {
2083 return 1; 2073 if (classify)
2074 return 1;
2075 rc = 0;
2076 }
2084 if (rc != 0) 2077 if (rc != 0)
2085 return 0; 2078 return 0;
2086 if ((link->ap->flags & ATA_FLAG_PMP) && ata_is_host_link(link)) 2079 if ((link->ap->flags & ATA_FLAG_PMP) && ata_is_host_link(link))
2087 return 1; 2080 return 1;
2088 if (classify && !(link->flags & ATA_LFLAG_ASSUME_CLASS) &&
2089 classes[0] == ATA_DEV_UNKNOWN)
2090 return 1;
2091 return 0; 2081 return 0;
2092} 2082}
2093 2083