Skip to content

Commit

Permalink
libata-pmp: propagate timeout to host link
Browse files Browse the repository at this point in the history
Timeout on downstream command may indicate transmission problem on
host link.  Propagate timeouts to host link.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Jan 10, 2008
1 parent 8048307 commit 2695e36
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions drivers/ata/libata-eh.c
Original file line number Diff line number Diff line change
Expand Up @@ -1733,11 +1733,15 @@ static void ata_eh_link_autopsy(struct ata_link *link)
ehc->i.action &= ~ATA_EH_PERDEV_MASK;
}

/* consider speeding down */
/* propagate timeout to host link */
if ((all_err_mask & AC_ERR_TIMEOUT) && !ata_is_host_link(link))
ap->link.eh_context.i.err_mask |= AC_ERR_TIMEOUT;

/* record error and consider speeding down */
dev = ehc->i.dev;
if (!dev && ata_link_max_devices(link) == 1 &&
ata_dev_enabled(link->device))
dev = link->device;
if (!dev && ((ata_link_max_devices(link) == 1 &&
ata_dev_enabled(link->device))))
dev = link->device;

if (dev)
ehc->i.action |= ata_eh_speed_down(dev, is_io, all_err_mask);
Expand All @@ -1759,8 +1763,14 @@ void ata_eh_autopsy(struct ata_port *ap)
{
struct ata_link *link;

__ata_port_for_each_link(link, ap)
ata_port_for_each_link(link, ap)
ata_eh_link_autopsy(link);

/* Autopsy of fanout ports can affect host link autopsy.
* Perform host link autopsy last.
*/
if (ap->nr_pmp_links)
ata_eh_link_autopsy(&ap->link);
}

/**
Expand Down

0 comments on commit 2695e36

Please sign in to comment.