From: Neil Brown <neilb@suse.de>
To: Bernd Schubert <bernd-schubert@gmx.de>
Cc: Dan Williams <dan.j.williams@intel.com>, linux-raid@vger.kernel.org
Subject: Re: [patch] limit error rate
Date: Mon, 28 Apr 2008 11:44:59 +1000 [thread overview]
Message-ID: <18453.11291.797493.538474@notabene.brown> (raw)
In-Reply-To: message from Bernd Schubert on Thursday April 24
On Thursday April 24, bernd-schubert@gmx.de 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
next prev parent reply other threads:[~2008-04-28 1:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-12 18:16 [patch] limit error rate Bernd Schubert
2008-04-23 0:44 ` Dan Williams
2008-04-23 22:55 ` Bernd Schubert
2008-04-28 1:44 ` Neil Brown [this message]
2008-04-28 21:33 ` Bernd Schubert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18453.11291.797493.538474@notabene.brown \
--to=neilb@suse.de \
--cc=bernd-schubert@gmx.de \
--cc=dan.j.williams@intel.com \
--cc=linux-raid@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).