diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-08-22 16:11:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-08-23 14:44:30 -0400 |
commit | 005eca5e74b222db4360f8938140eb843d283325 (patch) | |
tree | 8a8865c1c260de81d13e322ab4259833b4918e15 /drivers/md | |
parent | 4c5640cb5f5a6fd780d99397eca028b575cb1206 (diff) |
[PATCH] md: make sure resync gets started when array starts.
We weren't actually waking up the md thread after setting
MD_RECOVERY_NEEDED when assembling an array, so it is possible to lose a
race and not actually start resync.
So add a call to md_wakeup_thread, and while we are at it, remove all the
"if (mddev->thread)" guards as md_wake_thread does its own checking.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/md.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index d4c275604a3e..486ee50cfdda 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -256,8 +256,7 @@ static inline void mddev_unlock(mddev_t * mddev) | |||
256 | { | 256 | { |
257 | up(&mddev->reconfig_sem); | 257 | up(&mddev->reconfig_sem); |
258 | 258 | ||
259 | if (mddev->thread) | 259 | md_wakeup_thread(mddev->thread); |
260 | md_wakeup_thread(mddev->thread); | ||
261 | } | 260 | } |
262 | 261 | ||
263 | mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr) | 262 | mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr) |
@@ -1714,6 +1713,7 @@ static int do_md_run(mddev_t * mddev) | |||
1714 | mddev->in_sync = 1; | 1713 | mddev->in_sync = 1; |
1715 | 1714 | ||
1716 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 1715 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
1716 | md_wakeup_thread(mddev->thread); | ||
1717 | 1717 | ||
1718 | if (mddev->sb_dirty) | 1718 | if (mddev->sb_dirty) |
1719 | md_update_sb(mddev); | 1719 | md_update_sb(mddev); |
@@ -2236,8 +2236,7 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info) | |||
2236 | export_rdev(rdev); | 2236 | export_rdev(rdev); |
2237 | 2237 | ||
2238 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 2238 | set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
2239 | if (mddev->thread) | 2239 | md_wakeup_thread(mddev->thread); |
2240 | md_wakeup_thread(mddev->thread); | ||
2241 | return err; | 2240 | return err; |
2242 | } | 2241 | } |
2243 | 2242 | ||