diff options
author | NeilBrown <neilb@suse.de> | 2011-08-31 12:49:14 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-08-31 12:49:14 +1000 |
commit | 43220aa0f22cd3ce5b30246d50ccd696d119edea (patch) | |
tree | 2738ff3d5acfbe899f30c4991175f945211e941d /drivers | |
parent | 7da64a0abc3b2c6cbd3521672e9bb74dd560bb89 (diff) | |
download | linux-3.10-43220aa0f22cd3ce5b30246d50ccd696d119edea.tar.gz linux-3.10-43220aa0f22cd3ce5b30246d50ccd696d119edea.tar.bz2 linux-3.10-43220aa0f22cd3ce5b30246d50ccd696d119edea.zip |
md/raid5: fix a hang on device failure.
Waiting for a 'blocked' rdev to become unblocked in the raid5d thread
cannot work with internal metadata as it is the raid5d thread which
will clear the blocked flag.
This wasn't a problem in 3.0 and earlier as we only set the blocked
flag when external metadata was used then.
However we now set it always, so we need to be more careful.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/raid5.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index dbae459fb02..43709fa6b6d 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -3336,7 +3336,7 @@ static void handle_stripe(struct stripe_head *sh) finish: /* wait for this device to become unblocked */ - if (unlikely(s.blocked_rdev)) + if (conf->mddev->external && unlikely(s.blocked_rdev)) md_wait_for_blocked_rdev(s.blocked_rdev, conf->mddev); if (s.handle_bad_blocks) |