diff --git a/drivers/md/md.c b/drivers/md/md.c index 79eb63fdb4b3a37ad6707d696f434bddef463873..78fe3e97ff993293c1d018431c8f5bf1e2531f16 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -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))