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 | |
| 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>
| -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 | ||
