|
|
|
Re: [PATCH] md/raid1:using else-if instead if. | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] |
|
On Sun, 01 Apr 2012 17:03:11 -0700 "H. Peter Anvin" <hpa@xxxxxxxxx> wrote:
> On 03/31/2012 07:29 PM, majianpeng wrote:
> > From 798f3fce3d077db049a44d0d2434261c937796e9 Mon Sep 17 00:00:00 2001
> > From: majianpeng <majianpeng@xxxxxxxxx>
> > Date: Sun, 1 Apr 2012 10:23:56 +0800
> > Subject: [PATCH] md/raid1:using else-if instead if.
> >
> > Signed-off-by: majianpeng <majianpeng@xxxxxxxxx>
> > ---
> > drivers/md/raid1.c | 3 +--
> > 1 files changed, 1 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> > index 4a40a20..a9de970 100644
> > --- a/drivers/md/raid1.c
> > +++ b/drivers/md/raid1.c
> > @@ -2024,8 +2024,7 @@ static void handle_sync_write_finished(struct r1conf *conf, struct r1bio *r1_bio
> > if (test_bit(BIO_UPTODATE, &bio->bi_flags) &&
> > test_bit(R1BIO_MadeGood, &r1_bio->state)) {
> > rdev_clear_badblocks(rdev, r1_bio->sector, s);
> > - }
> > - if (!test_bit(BIO_UPTODATE, &bio->bi_flags) &&
> > + } else if (!test_bit(BIO_UPTODATE, &bio->bi_flags) &&
> > test_bit(R1BIO_WriteError, &r1_bio->state)) {
> > if (!rdev_set_badblocks(rdev, r1_bio->sector, s, 0))
> > md_error(conf->mddev, rdev);
I don't like this option as it confuses the logic..
>
> It would be even better to:
>
> if (test_bit(BIO_UPDATE, &bio->bi_flags)) {
> if (test_bit(R1BIO_MadeGood, &r1_bio->state))
> rdev_clear_badblocks(rdev, r1_bio->sector, s);
> } else {
> if (test_bit(R1BIO_WriteError, &r1_bio->state)) {
> ...
>
and I don't really like adding unnecessary indentation.
>
> ... rather than testing the bit twice.
I'm really surprised that the compiler doesn't optimise that out.
I see:
0x0000000000004fb1 <+113>: mov 0x18(%rcx),%rax
0x0000000000004fb5 <+117>: test $0x1,%al
0x0000000000004fb7 <+119>: je 0x4f70 <handle_sync_write_finished+48>
which is the first test_bit(BIO_UPTODATE), then
0x0000000000004f70 <+48>: mov 0x18(%rcx),%rax
0x0000000000004f74 <+52>: test $0x1,%al
0x0000000000004f76 <+54>: jne 0x4f82 <handle_sync_write_finished+66>
so it is repeating a test that it already knows the answer too.
Why not just "je 0x4f78 <handle_sync_write_finished+56> I wonder.
Still, I'm much more interested in readability than this sort of micro
optimisation, so I'll leave the code as it is.
Thanks,
NeilBrown
>
> -hpa
>
>
Attachment:
signature.asc
Description: PGP signature
![]() |
![]() |