aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorJonathan Brassow <jbrassow@redhat.com>2011-06-07 18:49:36 -0400
committerNeilBrown <neilb@suse.de>2011-06-08 01:11:31 -0400
commit0fd018af37dadbb7826850883ad8abfecdb1a00b (patch)
treef95ebb9ec9111dc87ad8037ff7e07da802d924e3 /drivers/md/md.c
parentac42450c7c814769bee963ae4b897c149bb0ab53 (diff)
MD: move thread wakeups into resume
Move personality and sync/recovery thread starting outside md_run. Moving the wakeup's of the personality and sync/recovery threads out of md_run and into do_md_run and mddev_resume solves two issues: 1) It allows bitmap_load to be called before the sync_thread is run and 2) when MD personalities are used by device-mapper (dm-raid.c), the start-up of the array is better alligned with device-mapper primatives (CTR/resume/suspend/DTR). I/O - in this case, recovery operations - should not happen until after a resume has taken place. Signed-off-by: Jonathan Brassow <jbrassow@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 3715e89dcaae..d5385188c445 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -351,6 +351,9 @@ void mddev_resume(mddev_t *mddev)
351 mddev->suspended = 0; 351 mddev->suspended = 0;
352 wake_up(&mddev->sb_wait); 352 wake_up(&mddev->sb_wait);
353 mddev->pers->quiesce(mddev, 0); 353 mddev->pers->quiesce(mddev, 0);
354
355 md_wakeup_thread(mddev->thread);
356 md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
354} 357}
355EXPORT_SYMBOL_GPL(mddev_resume); 358EXPORT_SYMBOL_GPL(mddev_resume);
356 359
@@ -4619,9 +4622,6 @@ int md_run(mddev_t *mddev)
4619 if (mddev->flags) 4622 if (mddev->flags)
4620 md_update_sb(mddev, 0); 4623 md_update_sb(mddev, 0);
4621 4624
4622 md_wakeup_thread(mddev->thread);
4623 md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
4624
4625 md_new_event(mddev); 4625 md_new_event(mddev);
4626 sysfs_notify_dirent_safe(mddev->sysfs_state); 4626 sysfs_notify_dirent_safe(mddev->sysfs_state);
4627 sysfs_notify_dirent_safe(mddev->sysfs_action); 4627 sysfs_notify_dirent_safe(mddev->sysfs_action);
@@ -4642,6 +4642,10 @@ static int do_md_run(mddev_t *mddev)
4642 bitmap_destroy(mddev); 4642 bitmap_destroy(mddev);
4643 goto out; 4643 goto out;
4644 } 4644 }
4645
4646 md_wakeup_thread(mddev->thread);
4647 md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
4648
4645 set_capacity(mddev->gendisk, mddev->array_sectors); 4649 set_capacity(mddev->gendisk, mddev->array_sectors);
4646 revalidate_disk(mddev->gendisk); 4650 revalidate_disk(mddev->gendisk);
4647 mddev->changed = 1; 4651 mddev->changed = 1;