diff options
author | Neil Brown <neilb@suse.de> | 2006-01-31 00:01:48 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2006-01-31 00:01:48 +0000 |
commit | 576d6d83af3e684bda417493cf64aab3ce235ab2 (patch) | |
tree | 67438281f1ad7beced6cea2cb4a1f2b6dce9561d | |
parent | 6ee5c05a11a7c5160178e6eb21a30d294f56f235 (diff) | |
download | mdadm-576d6d83af3e684bda417493cf64aab3ce235ab2.tar.gz mdadm-576d6d83af3e684bda417493cf64aab3ce235ab2.tar.xz mdadm-576d6d83af3e684bda417493cf64aab3ce235ab2.zip |
Prefer version-1 superblocks for v.large devices.
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r-- | Create.c | 21 | ||||
-rw-r--r-- | mdadm.c | 8 | ||||
-rw-r--r-- | super1.c | 3 |
3 files changed, 23 insertions, 9 deletions
@@ -214,6 +214,27 @@ int Create(struct supertype *st, char *mddev, int mdfd, ldsize = dsize; ldsize <<= 9; } + if (st == NULL) { + /* Need to choose a default metadata, which is different + * depending on the sizes of devices + */ + int i; + char *name = "default"; + if (level >= 1 && ldsize > (0x7fffffffULL<<10)) + name = "default/large"; + for(i=0; !st && superlist[i]; i++) + st = superlist[i]->match_metadata_desc(name); + + if (!st) { + fprintf(stderr, Name ": internal error - no default metadata style\n"); + exit(2); + } + if (st->ss->major != 0 || + st->minor_version != 90) + fprintf(stderr, Name ": Defaulting to verion %d.%d metadata\n", + st->ss->major, + st->minor_version); + } freesize = st->ss->avail_size(st, ldsize >> 9); if (freesize == 0) { fprintf(stderr, Name ": %s is too small: %luK\n", @@ -1006,14 +1006,6 @@ int main(int argc, char *argv[]) rv = 1; break; } - if (ss == NULL) { - for(i=0; !ss && superlist[i]; i++) - ss = superlist[i]->match_metadata_desc("default"); - } - if (!ss) { - fprintf(stderr, Name ": internal error - no default metadata style\n"); - exit(2); - } rv = Create(ss, devlist->devname, mdfd, chunk, level, layout, size<0 ? 0 : size, raiddisks, sparedisks, ident.name, @@ -911,7 +911,8 @@ static struct supertype *match_metadata_desc1(char *arg) st->ss = &super1; st->max_devs = 384; if (strcmp(arg, "1") == 0 || - strcmp(arg, "1.0") == 0) { + strcmp(arg, "1.0") == 0 || + strcmp(arg, "default/large") == 0) { st->minor_version = 0; return st; } |