diff options
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r-- | drivers/md/raid10.c | 7 |
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)) { |