Skip to content

Commit

Permalink
raid5: fix a race of stripe count check
Browse files Browse the repository at this point in the history
I hit another BUG_ON with e240c18. In __get_priority_stripe(),
stripe count equals to 0 initially. Between atomic_inc and BUG_ON,
get_active_stripe() finds the stripe. So the stripe count isn't 1 any more.

V2: keeps the BUG_ON suggested by Neil.

Signed-off-by: Shaohua Li <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
  • Loading branch information
Shaohua Li authored and neilbrown committed Apr 17, 2014
1 parent e240c18 commit c7a6d35
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -4370,8 +4370,7 @@ static struct stripe_head *__get_priority_stripe(struct r5conf *conf, int group)
sh->group = NULL;
}
list_del_init(&sh->lru);
atomic_inc(&sh->count);
BUG_ON(atomic_read(&sh->count) != 1);
BUG_ON(atomic_inc_return(&sh->count) != 1);
return sh;
}

Expand Down

0 comments on commit c7a6d35

Please sign in to comment.