Re: [PATCH v2] libata: skip old error history when counting probe trials

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux