On Thu, May 3, 2012 at 7:15 AM, Lin Ming <ming.m.lin@xxxxxxxxx> wrote: > Commit d902747("[libata] Add ATA transport class") introduced > ATA_EFLAG_OLD_ER to mark entries in the error ring as cleared. > > But ata_count_probe_trials_cb() didn't check this flag and it still > counts the old error history. So wrong probe trials count is returned > and it causes problem, for example, SATA link speed is slowed down from > 3.0Gbps to 1.5Gbps. > > Fix it by checking ATA_EFLAG_OLD_ER in ata_count_probe_trials_cb(). > > Cc: stable <stable@xxxxxxxxxxxxxxx> # 2.6.37+ > Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx> > --- > > v2: update logs, specify the summary of commit d902747 > > drivers/ata/libata-eh.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c > index c61316e..d1fbd59 100644 > --- a/drivers/ata/libata-eh.c > +++ b/drivers/ata/libata-eh.c > @@ -3501,7 +3501,8 @@ static int ata_count_probe_trials_cb(struct ata_ering_entry *ent, void *void_arg > u64 now = get_jiffies_64(); > int *trials = void_arg; > > - if (ent->timestamp < now - min(now, interval)) > + if ((ent->eflags & ATA_EFLAG_OLD_ER) || > + (ent->timestamp < now - min(now, interval))) > return -1; > > (*trials)++; > -- > 1.7.9 > Acked-by: Gwendal Grignou <gwendal@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html