diff options
author | NeilBrown <neilb@suse.de> | 2010-10-28 02:30:20 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-10-28 02:30:20 -0400 |
commit | d97a41dc9c44f5829b7af7aa69fda10fd82b6b4e (patch) | |
tree | 4a834cce291edf6798f57d925a6134c287de974d /drivers/md | |
parent | 12ba8d1e9262ce81a695795410bd9ee5c9407ba1 (diff) |
md: Fix regression with raid1 arrays without persistent metadata.
A RAID1 which has no persistent metadata, whether internal or
external, will hang on the first write.
This is caused by commit 070dc6dd7103b6b3f7e4d46e754354a5c15f366e
In that case, MD_CHANGE_PENDING never gets cleared.
So during md_update_sb, is neither persistent or external,
clear MD_CHANGE_PENDING.
This is suitable for 2.6.36-stable.
Signed-off-by: NeilBrown <neilb@suse.de>
Cc: stable@kernel.org
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/md.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 225815197a3d..64f97168cefa 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -2108,6 +2108,8 @@ repeat: | |||
2108 | if (!mddev->persistent) { | 2108 | if (!mddev->persistent) { |
2109 | clear_bit(MD_CHANGE_CLEAN, &mddev->flags); | 2109 | clear_bit(MD_CHANGE_CLEAN, &mddev->flags); |
2110 | clear_bit(MD_CHANGE_DEVS, &mddev->flags); | 2110 | clear_bit(MD_CHANGE_DEVS, &mddev->flags); |
2111 | if (!mddev->external) | ||
2112 | clear_bit(MD_CHANGE_PENDING, &mddev->flags); | ||
2111 | wake_up(&mddev->sb_wait); | 2113 | wake_up(&mddev->sb_wait); |
2112 | return; | 2114 | return; |
2113 | } | 2115 | } |