[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>
This commit is contained in:
Родитель
4c5640cb5f
Коммит
005eca5e74
|
@ -256,8 +256,7 @@ static inline void mddev_unlock(mddev_t * mddev)
|
|||
{
|
||||
up(&mddev->reconfig_sem);
|
||||
|
||||
if (mddev->thread)
|
||||
md_wakeup_thread(mddev->thread);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
}
|
||||
|
||||
mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr)
|
||||
|
@ -1714,6 +1713,7 @@ static int do_md_run(mddev_t * mddev)
|
|||
mddev->in_sync = 1;
|
||||
|
||||
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
|
||||
if (mddev->sb_dirty)
|
||||
md_update_sb(mddev);
|
||||
|
@ -2236,8 +2236,7 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
|
|||
export_rdev(rdev);
|
||||
|
||||
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
||||
if (mddev->thread)
|
||||
md_wakeup_thread(mddev->thread);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче