summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2015-05-21 01:10:01 -0400
committerNeilBrown <neilb@suse.de>2015-05-27 21:29:14 -0400
commit2b6b24574256c05be145936f1493aec74c6904e5 (patch)
tree76ccb20859a5693323f1130411b4b8c565967b99 /drivers/md/raid5.c
parent8532e3439087de69bb1b71fd6be2baa6fc196a55 (diff)
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>
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index b9f2b9cc6060..c55a68f37c72 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -837,6 +837,15 @@ static void stripe_add_to_batch_list(struct r5conf *conf, struct stripe_head *sh
837 < IO_THRESHOLD) 837 < IO_THRESHOLD)
838 md_wakeup_thread(conf->mddev->thread); 838 md_wakeup_thread(conf->mddev->thread);
839 839
840 if (test_and_clear_bit(STRIPE_BIT_DELAY, &sh->state)) {
841 int seq = sh->bm_seq;
842 if (test_bit(STRIPE_BIT_DELAY, &sh->batch_head->state) &&
843 sh->batch_head->bm_seq > seq)
844 seq = sh->batch_head->bm_seq;
845 set_bit(STRIPE_BIT_DELAY, &sh->batch_head->state);
846 sh->batch_head->bm_seq = seq;
847 }
848
840 atomic_inc(&sh->count); 849 atomic_inc(&sh->count);
841unlock_out: 850unlock_out:
842 unlock_two_stripes(head, sh); 851 unlock_two_stripes(head, sh);