|
@@ -779,7 +779,6 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
|
|
|
mddev->major_version = 0;
|
|
|
mddev->minor_version = sb->minor_version;
|
|
|
mddev->patch_version = sb->patch_version;
|
|
|
- mddev->persistent = 1;
|
|
|
mddev->external = 0;
|
|
|
mddev->chunk_size = sb->chunk_size;
|
|
|
mddev->ctime = sb->ctime;
|
|
@@ -1159,7 +1158,6 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
|
|
|
if (mddev->raid_disks == 0) {
|
|
|
mddev->major_version = 1;
|
|
|
mddev->patch_version = 0;
|
|
|
- mddev->persistent = 1;
|
|
|
mddev->external = 0;
|
|
|
mddev->chunk_size = le32_to_cpu(sb->chunksize) << 9;
|
|
|
mddev->ctime = le64_to_cpu(sb->ctime) & ((1ULL << 32)-1);
|
|
@@ -3213,8 +3211,11 @@ static int do_md_run(mddev_t * mddev)
|
|
|
/*
|
|
|
* Analyze all RAID superblock(s)
|
|
|
*/
|
|
|
- if (!mddev->raid_disks)
|
|
|
+ if (!mddev->raid_disks) {
|
|
|
+ if (!mddev->persistent)
|
|
|
+ return -EINVAL;
|
|
|
analyze_sbs(mddev);
|
|
|
+ }
|
|
|
|
|
|
chunk_size = mddev->chunk_size;
|
|
|
|
|
@@ -3621,6 +3622,7 @@ static int do_md_stop(mddev_t * mddev, int mode)
|
|
|
mddev->resync_max = MaxSector;
|
|
|
mddev->reshape_position = MaxSector;
|
|
|
mddev->external = 0;
|
|
|
+ mddev->persistent = 0;
|
|
|
|
|
|
} else if (mddev->pers)
|
|
|
printk(KERN_INFO "md: %s switched to read-only mode.\n",
|
|
@@ -3729,6 +3731,7 @@ static void autorun_devices(int part)
|
|
|
mddev_unlock(mddev);
|
|
|
} else {
|
|
|
printk(KERN_INFO "md: created %s\n", mdname(mddev));
|
|
|
+ mddev->persistent = 1;
|
|
|
ITERATE_RDEV_GENERIC(candidates,rdev,tmp) {
|
|
|
list_del_init(&rdev->same_set);
|
|
|
if (bind_rdev_to_array(rdev, mddev))
|