diff options
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r-- | drivers/md/raid5.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index befadb41a11f..62b6b3a83abf 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -3588,8 +3588,18 @@ static void handle_stripe(struct stripe_head *sh) | |||
3588 | 3588 | ||
3589 | finish: | 3589 | finish: |
3590 | /* wait for this device to become unblocked */ | 3590 | /* wait for this device to become unblocked */ |
3591 | if (conf->mddev->external && unlikely(s.blocked_rdev)) | 3591 | if (unlikely(s.blocked_rdev)) { |
3592 | md_wait_for_blocked_rdev(s.blocked_rdev, conf->mddev); | 3592 | if (conf->mddev->external) |
3593 | md_wait_for_blocked_rdev(s.blocked_rdev, | ||
3594 | conf->mddev); | ||
3595 | else | ||
3596 | /* Internal metadata will immediately | ||
3597 | * be written by raid5d, so we don't | ||
3598 | * need to wait here. | ||
3599 | */ | ||
3600 | rdev_dec_pending(s.blocked_rdev, | ||
3601 | conf->mddev); | ||
3602 | } | ||
3593 | 3603 | ||
3594 | if (s.handle_bad_blocks) | 3604 | if (s.handle_bad_blocks) |
3595 | for (i = disks; i--; ) { | 3605 | for (i = disks; i--; ) { |