|
|
@@ -5675,15 +5675,7 @@ EXPORT_SYMBOL_GPL(md_stop_writes);
|
|
|
|
|
|
static void mddev_detach(struct mddev *mddev)
|
|
|
{
|
|
|
- struct bitmap *bitmap = mddev->bitmap;
|
|
|
- /* wait for behind writes to complete */
|
|
|
- if (bitmap && atomic_read(&bitmap->behind_writes) > 0) {
|
|
|
- pr_debug("md:%s: behind writes in progress - waiting to stop.\n",
|
|
|
- mdname(mddev));
|
|
|
- /* need to kick something here to make sure I/O goes? */
|
|
|
- wait_event(bitmap->behind_wait,
|
|
|
- atomic_read(&bitmap->behind_writes) == 0);
|
|
|
- }
|
|
|
+ bitmap_wait_behind_writes(mddev);
|
|
|
if (mddev->pers && mddev->pers->quiesce) {
|
|
|
mddev->pers->quiesce(mddev, 1);
|
|
|
mddev->pers->quiesce(mddev, 0);
|
|
|
@@ -5696,6 +5688,7 @@ static void mddev_detach(struct mddev *mddev)
|
|
|
static void __md_stop(struct mddev *mddev)
|
|
|
{
|
|
|
struct md_personality *pers = mddev->pers;
|
|
|
+ bitmap_destroy(mddev);
|
|
|
mddev_detach(mddev);
|
|
|
/* Ensure ->event_work is done */
|
|
|
flush_workqueue(md_misc_wq);
|
|
|
@@ -5716,7 +5709,6 @@ void md_stop(struct mddev *mddev)
|
|
|
* This is called from dm-raid
|
|
|
*/
|
|
|
__md_stop(mddev);
|
|
|
- bitmap_destroy(mddev);
|
|
|
if (mddev->bio_set)
|
|
|
bioset_free(mddev->bio_set);
|
|
|
}
|
|
|
@@ -5854,7 +5846,6 @@ static int do_md_stop(struct mddev *mddev, int mode,
|
|
|
if (mode == 0) {
|
|
|
pr_info("md: %s stopped.\n", mdname(mddev));
|
|
|
|
|
|
- bitmap_destroy(mddev);
|
|
|
if (mddev->bitmap_info.file) {
|
|
|
struct file *f = mddev->bitmap_info.file;
|
|
|
spin_lock(&mddev->lock);
|