Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d897dbf9 authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds
Browse files

md: reinitialise more mddev fields in do_md_stop.



I keep finding problems where an mddev gets reused and some fields has a value
from a previous usage that confuses the new usage.  So clear all fields that
could possible need clearing when calling do_md_stop.

Also initialise the 'level' of a new array to LEVEL_NONE (which isn't 0).

Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8377bc80
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -276,6 +276,7 @@ static mddev_t * mddev_find(dev_t unit)
	init_waitqueue_head(&new->sb_wait);
	init_waitqueue_head(&new->sb_wait);
	new->reshape_position = MaxSector;
	new->reshape_position = MaxSector;
	new->resync_max = MaxSector;
	new->resync_max = MaxSector;
	new->level = LEVEL_NONE;


	new->queue = blk_alloc_queue(GFP_KERNEL);
	new->queue = blk_alloc_queue(GFP_KERNEL);
	if (!new->queue) {
	if (!new->queue) {
@@ -3714,6 +3715,30 @@ static int do_md_stop(mddev_t * mddev, int mode)
		mddev->reshape_position = MaxSector;
		mddev->reshape_position = MaxSector;
		mddev->external = 0;
		mddev->external = 0;
		mddev->persistent = 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_size = 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 = 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->changed = 0;
		mddev->degraded = 0;
		mddev->barriers_work = 0;
		mddev->safemode = 0;


	} else if (mddev->pers)
	} else if (mddev->pers)
		printk(KERN_INFO "md: %s switched to read-only mode.\n",
		printk(KERN_INFO "md: %s switched to read-only mode.\n",