aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@cse.unsw.edu.au>2005-08-22 16:11:08 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-08-23 14:44:30 -0400
commit005eca5e74b222db4360f8938140eb843d283325 (patch)
tree8a8865c1c260de81d13e322ab4259833b4918e15
parent4c5640cb5f5a6fd780d99397eca028b575cb1206 (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.c7
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
263mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr) 262mdk_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