md: start to refactor do_md_stop
do_md_stop is large and clunky, so hard to understand. This is a first step of refactoring, pulling two simple sub-functions out. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
fe60b01428
commit
6177b472ab
|
@ -4568,6 +4568,58 @@ void restore_bitmap_write_access(struct file *file)
|
||||||
spin_unlock(&inode->i_lock);
|
spin_unlock(&inode->i_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void md_clean(mddev_t *mddev)
|
||||||
|
{
|
||||||
|
mddev->array_sectors = 0;
|
||||||
|
mddev->external_size = 0;
|
||||||
|
mddev->dev_sectors = 0;
|
||||||
|
mddev->raid_disks = 0;
|
||||||
|
mddev->recovery_cp = 0;
|
||||||
|
mddev->resync_min = 0;
|
||||||
|
mddev->resync_max = MaxSector;
|
||||||
|
mddev->reshape_position = MaxSector;
|
||||||
|
mddev->external = 0;
|
||||||
|
mddev->persistent = 0;
|
||||||
|
mddev->level = LEVEL_NONE;
|
||||||
|
mddev->clevel[0] = 0;
|
||||||
|
mddev->flags = 0;
|
||||||
|
mddev->ro = 0;
|
||||||
|
mddev->metadata_type[0] = 0;
|
||||||
|
mddev->chunk_sectors = 0;
|
||||||
|
mddev->ctime = mddev->utime = 0;
|
||||||
|
mddev->layout = 0;
|
||||||
|
mddev->max_disks = 0;
|
||||||
|
mddev->events = 0;
|
||||||
|
mddev->delta_disks = 0;
|
||||||
|
mddev->new_level = LEVEL_NONE;
|
||||||
|
mddev->new_layout = 0;
|
||||||
|
mddev->new_chunk_sectors = 0;
|
||||||
|
mddev->curr_resync = 0;
|
||||||
|
mddev->resync_mismatches = 0;
|
||||||
|
mddev->suspend_lo = mddev->suspend_hi = 0;
|
||||||
|
mddev->sync_speed_min = mddev->sync_speed_max = 0;
|
||||||
|
mddev->recovery = 0;
|
||||||
|
mddev->in_sync = 0;
|
||||||
|
mddev->degraded = 0;
|
||||||
|
mddev->barriers_work = 0;
|
||||||
|
mddev->safemode = 0;
|
||||||
|
mddev->bitmap_info.offset = 0;
|
||||||
|
mddev->bitmap_info.default_offset = 0;
|
||||||
|
mddev->bitmap_info.chunksize = 0;
|
||||||
|
mddev->bitmap_info.daemon_sleep = 0;
|
||||||
|
mddev->bitmap_info.max_write_behind = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void md_stop(mddev_t *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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* mode:
|
/* mode:
|
||||||
* 0 - completely stop and dis-assemble array
|
* 0 - completely stop and dis-assemble array
|
||||||
* 1 - switch to readonly
|
* 1 - switch to readonly
|
||||||
|
@ -4608,14 +4660,11 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
|
||||||
if (mddev->ro)
|
if (mddev->ro)
|
||||||
set_disk_ro(disk, 0);
|
set_disk_ro(disk, 0);
|
||||||
|
|
||||||
mddev->pers->stop(mddev);
|
md_stop(mddev);
|
||||||
mddev->queue->merge_bvec_fn = NULL;
|
mddev->queue->merge_bvec_fn = NULL;
|
||||||
mddev->queue->unplug_fn = NULL;
|
mddev->queue->unplug_fn = NULL;
|
||||||
mddev->queue->backing_dev_info.congested_fn = NULL;
|
mddev->queue->backing_dev_info.congested_fn = NULL;
|
||||||
module_put(mddev->pers->owner);
|
|
||||||
if (mddev->pers->sync_request && mddev->to_remove == NULL)
|
|
||||||
mddev->to_remove = &md_redundancy_group;
|
|
||||||
mddev->pers = NULL;
|
|
||||||
/* tell userspace to handle 'inactive' */
|
/* tell userspace to handle 'inactive' */
|
||||||
sysfs_notify_dirent(mddev->sysfs_state);
|
sysfs_notify_dirent(mddev->sysfs_state);
|
||||||
|
|
||||||
|
@ -4663,44 +4712,7 @@ out:
|
||||||
|
|
||||||
export_array(mddev);
|
export_array(mddev);
|
||||||
|
|
||||||
mddev->array_sectors = 0;
|
md_clean(mddev);
|
||||||
mddev->external_size = 0;
|
|
||||||
mddev->dev_sectors = 0;
|
|
||||||
mddev->raid_disks = 0;
|
|
||||||
mddev->recovery_cp = 0;
|
|
||||||
mddev->resync_min = 0;
|
|
||||||
mddev->resync_max = MaxSector;
|
|
||||||
mddev->reshape_position = MaxSector;
|
|
||||||
mddev->external = 0;
|
|
||||||
mddev->persistent = 0;
|
|
||||||
mddev->level = LEVEL_NONE;
|
|
||||||
mddev->clevel[0] = 0;
|
|
||||||
mddev->flags = 0;
|
|
||||||
mddev->ro = 0;
|
|
||||||
mddev->metadata_type[0] = 0;
|
|
||||||
mddev->chunk_sectors = 0;
|
|
||||||
mddev->ctime = mddev->utime = 0;
|
|
||||||
mddev->layout = 0;
|
|
||||||
mddev->max_disks = 0;
|
|
||||||
mddev->events = 0;
|
|
||||||
mddev->delta_disks = 0;
|
|
||||||
mddev->new_level = LEVEL_NONE;
|
|
||||||
mddev->new_layout = 0;
|
|
||||||
mddev->new_chunk_sectors = 0;
|
|
||||||
mddev->curr_resync = 0;
|
|
||||||
mddev->resync_mismatches = 0;
|
|
||||||
mddev->suspend_lo = mddev->suspend_hi = 0;
|
|
||||||
mddev->sync_speed_min = mddev->sync_speed_max = 0;
|
|
||||||
mddev->recovery = 0;
|
|
||||||
mddev->in_sync = 0;
|
|
||||||
mddev->degraded = 0;
|
|
||||||
mddev->barriers_work = 0;
|
|
||||||
mddev->safemode = 0;
|
|
||||||
mddev->bitmap_info.offset = 0;
|
|
||||||
mddev->bitmap_info.default_offset = 0;
|
|
||||||
mddev->bitmap_info.chunksize = 0;
|
|
||||||
mddev->bitmap_info.daemon_sleep = 0;
|
|
||||||
mddev->bitmap_info.max_write_behind = 0;
|
|
||||||
kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
|
kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
|
||||||
if (mddev->hold_active == UNTIL_STOP)
|
if (mddev->hold_active == UNTIL_STOP)
|
||||||
mddev->hold_active = 0;
|
mddev->hold_active = 0;
|
||||||
|
|
Loading…
Reference in New Issue