md/raid5: ensure whole batch is delayed for all required bitmap updates.
When we add a stripe to a batch, we need to be sure that head stripe will wait for the bitmap update required for the new stripe. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
8532e34390
commit
2b6b245742
1 changed files with 9 additions and 0 deletions
|
@ -837,6 +837,15 @@ static void stripe_add_to_batch_list(struct r5conf *conf, struct stripe_head *sh
|
||||||
< IO_THRESHOLD)
|
< IO_THRESHOLD)
|
||||||
md_wakeup_thread(conf->mddev->thread);
|
md_wakeup_thread(conf->mddev->thread);
|
||||||
|
|
||||||
|
if (test_and_clear_bit(STRIPE_BIT_DELAY, &sh->state)) {
|
||||||
|
int seq = sh->bm_seq;
|
||||||
|
if (test_bit(STRIPE_BIT_DELAY, &sh->batch_head->state) &&
|
||||||
|
sh->batch_head->bm_seq > seq)
|
||||||
|
seq = sh->batch_head->bm_seq;
|
||||||
|
set_bit(STRIPE_BIT_DELAY, &sh->batch_head->state);
|
||||||
|
sh->batch_head->bm_seq = seq;
|
||||||
|
}
|
||||||
|
|
||||||
atomic_inc(&sh->count);
|
atomic_inc(&sh->count);
|
||||||
unlock_out:
|
unlock_out:
|
||||||
unlock_two_stripes(head, sh);
|
unlock_two_stripes(head, sh);
|
||||||
|
|
Loading…
Add table
Reference in a new issue