aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid10.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r--drivers/md/raid10.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 1c1447dd3417..e3fd725d5c4d 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2664,6 +2664,7 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)
2664 if (fail) { 2664 if (fail) {
2665 spin_lock_irq(&conf->device_lock); 2665 spin_lock_irq(&conf->device_lock);
2666 list_add(&r10_bio->retry_list, &conf->bio_end_io_list); 2666 list_add(&r10_bio->retry_list, &conf->bio_end_io_list);
2667 conf->nr_queued++;
2667 spin_unlock_irq(&conf->device_lock); 2668 spin_unlock_irq(&conf->device_lock);
2668 md_wakeup_thread(conf->mddev->thread); 2669 md_wakeup_thread(conf->mddev->thread);
2669 } else { 2670 } else {
@@ -2691,8 +2692,10 @@ static void raid10d(struct md_thread *thread)
2691 LIST_HEAD(tmp); 2692 LIST_HEAD(tmp);
2692 spin_lock_irqsave(&conf->device_lock, flags); 2693 spin_lock_irqsave(&conf->device_lock, flags);
2693 if (!test_bit(MD_CHANGE_PENDING, &mddev->flags)) { 2694 if (!test_bit(MD_CHANGE_PENDING, &mddev->flags)) {
2694 list_add(&tmp, &conf->bio_end_io_list); 2695 while (!list_empty(&conf->bio_end_io_list)) {
2695 list_del_init(&conf->bio_end_io_list); 2696 list_move(conf->bio_end_io_list.prev, &tmp);
2697 conf->nr_queued--;
2698 }
2696 } 2699 }
2697 spin_unlock_irqrestore(&conf->device_lock, flags); 2700 spin_unlock_irqrestore(&conf->device_lock, flags);
2698 while (!list_empty(&tmp)) { 2701 while (!list_empty(&tmp)) {