libata: track SLEEP state and issue SRST to wake it up
ATA devices in SLEEP mode don't respond to any commands. SRST is necessary to wake it up. Till now, when a command is issued to a device in SLEEP mode, the command times out, which makes EH reset the device and retry the command after that, causing a long delay. This patch makes libata track SLEEP state and issue SRST automatically if a command is about to be issued to a device in SLEEP. Signed-off-by: Tejun Heo <htejun@gmail.com> Cc: Bruce Allen <ballen@gravity.phys.uwm.edu> Cc: Andrew Paprocki <andrew@ishiboo.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@@ -2208,9 +2208,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
|
||||
ata_link_for_each_dev(dev, link) {
|
||||
/* After the reset, the device state is PIO 0
|
||||
* and the controller state is undefined.
|
||||
* Record the mode.
|
||||
* Reset also wakes up drives from sleeping
|
||||
* mode.
|
||||
*/
|
||||
dev->pio_mode = XFER_PIO_0;
|
||||
dev->flags &= ~ATA_DFLAG_SLEEPING;
|
||||
|
||||
if (ata_link_offline(link))
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user