From 96dbc710d14b51f93aa19e55e9cc2e52c3e7df04 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 6 Feb 2008 01:39:53 -0800 Subject: [PATCH] --- yaml --- r: 83596 b: refs/heads/master c: 1ec4a9398dc05061b6258061676fede733458893 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 0a81395f20eb..762c6cb637ef 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c620727779f7cc8ea96efb71f0651a26349e59c1 +refs/heads/master: 1ec4a9398dc05061b6258061676fede733458893 diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index 79eb63fdb4b3..78fe3e97ff99 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/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))