Re: [patch] limit error rate | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
On Thursday April 24, bernd-schubert@xxxxxx wrote:
>
> @@ -1157,19 +1159,20 @@ static void raid5_end_read_request(struct bio * bi, int error)
>
> clear_bit(R5_UPTODATE, &sh->dev[i].flags);
> atomic_inc(&rdev->read_errors);
> - if (conf->mddev->degraded)
> + if (conf->mddev->degraded && printk_ratelimit())
> printk(KERN_WARNING "raid5:%s: read error not correctable (sector %llu on %s).\n",
> mdname(conf->mddev),
> (unsigned long long)(sh->sector + rdev->data_offset),
> bdn);
> - else if (test_bit(R5_ReWrite, &sh->dev[i].flags))
> + else if (test_bit(R5_ReWrite, &sh->dev[i].flags) &&
> + printk_ratelimit())
> /* Oh, no!!! */
> printk(KERN_WARNING "raid5:%s: read error NOT corrected!! (sector %llu on %s).\n",
> mdname(conf->mddev),
> (unsigned long long)(sh->sector + rdev->data_offset),
> bdn);
> else if (atomic_read(&rdev->read_errors)
> - > conf->max_nr_stripes)
> + > conf->max_nr_stripes && printk_ratelimit())
> printk(KERN_WARNING
> "raid5:%s: Too many read errors, failing device %s.\n",
> mdname(conf->mddev), bdn);
This is not good, you are subtly changing semantics.
You have changed:
if (A)
X;
else if (B)
Y;
else if (C)
Z;
else
W;
to
if (A && foo())
X;
else if (B && foo())
Y;
else if (C && foo())
Z;
else
W;
If 'A' and not 'foo()', you want nothing to happen, but you will
actually get one of Y, Z, or W happening, all of which are wrong.
>
> Btw, from my point of view the
>
> if (printk_ratelimit())
> printk("print output");
>
> looks odd. I just don't see why the API isn't
>
> printk_ratelimit("print output");
Very sensible. I've put
#define printk_rl printk_ratelimit() ?: printk
at the start of raid5.c, and used it to fix the problematic printks.
Thanks,
NeilBrown
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Home] [ATA RAID] [Linux] [Managing RAID on Linux] [Linux IDE] [Linux SCSI] [Linux Hams] [Device-Mapper] [Kernel] [Linux Books] [Linux Admin] [Linux Net] [GFS] [RPM] [Photos] [Yosemite Photos] [Yosemite News] [AMD 64] [Linux Nework]
![]() |