| From d89293abd95bfd7dd9229087d6c30c1464c5ac83 Mon Sep 17 00:00:00 2001 |
| From: Tejun Heo <tj@kernel.org> |
| Date: Thu, 29 Jan 2009 20:31:29 +0900 |
| Subject: libata: fix EH device failure handling |
| |
| From: Tejun Heo <tj@kernel.org> |
| |
| commit d89293abd95bfd7dd9229087d6c30c1464c5ac83 upstream. |
| |
| The dev->pio_mode > XFER_PIO_0 test is there to avoid unnecessary |
| speed down warning messages but it accidentally disabled SATA link spd |
| down during configuration phase after reset where PIO mode is always |
| zero. |
| |
| This patch fixes the problem by moving the test where it belongs. |
| This makes libata probing sequence behave better when the connection |
| is flaky at higher link speeds which isn't too uncommon for eSATA |
| devices. |
| |
| [cebbert@redhat.com: trivial backport to 2.6.27] |
| |
| Signed-off-by: Tejun Heo <tj@kernel.org> |
| Signed-off-by: Jeff Garzik <jgarzik@redhat.com> |
| Cc: Chuck Ebbert <cebbert@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/ata/libata-eh.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/ata/libata-eh.c |
| +++ b/drivers/ata/libata-eh.c |
| @@ -2694,12 +2694,13 @@ static int ata_eh_handle_dev_fail(struct |
| /* give it just one more chance */ |
| ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1); |
| case -EIO: |
| - if (ehc->tries[dev->devno] == 1 && dev->pio_mode > XFER_PIO_0) { |
| + if (ehc->tries[dev->devno] == 1) { |
| /* This is the last chance, better to slow |
| * down than lose it. |
| */ |
| sata_down_spd_limit(dev->link); |
| - ata_down_xfermask_limit(dev, ATA_DNXFER_PIO); |
| + if (dev->pio_mode > XFER_PIO_0) |
| + ata_down_xfermask_limit(dev, ATA_DNXFER_PIO); |
| } |
| } |
| |