md: call md_stop_writes from md_stop
authorNeilBrown <neilb@suse.de>
Thu, 1 Apr 2010 01:08:16 +0000 (12:08 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 18 May 2010 05:27:54 +0000 (15:27 +1000)
This moves the call to the other side of set_readonly, but that should
not be an issue.
This encapsulates in 'md_stop' all of the functionality for internally
stopping the array, leaving all the interactions with externalities
(sysfs, request_queue, gendisk) in do_md_stop.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c

index 3a2710a..f48ba41 100644 (file)
@@ -4634,12 +4634,14 @@ static void md_stop_writes(mddev_t *mddev)
 
 static void md_stop(mddev_t *mddev)
 {
+       md_stop_writes(mddev);
+
        mddev->pers->stop(mddev);
        if (mddev->pers->sync_request && mddev->to_remove == NULL)
                mddev->to_remove = &md_redundancy_group;
        module_put(mddev->pers->owner);
        mddev->pers = NULL;
-
+       clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
 }
 
 static int md_set_readonly(mddev_t *mddev, int is_open)
@@ -4684,8 +4686,6 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
                err = -EBUSY;
        } else if (mddev->pers) {
 
-               md_stop_writes(mddev);
-
                if (mddev->ro)
                        set_disk_ro(disk, 0);
 
@@ -4710,7 +4710,6 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
                if (mddev->ro)
                        mddev->ro = 0;
                
-               clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
                err = 0;
        }
        mutex_unlock(&mddev->open_mutex);