From 576d6d83af3e684bda417493cf64aab3ce235ab2 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 31 Jan 2006 00:01:48 +0000 Subject: [PATCH] Prefer version-1 superblocks for v.large devices. Signed-off-by: Neil Brown --- Create.c | 21 +++++++++++++++++++++ mdadm.c | 8 -------- super1.c | 3 ++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Create.c b/Create.c index 7fbf9c02..71bab18b 100644 --- a/Create.c +++ b/Create.c @@ -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", diff --git a/mdadm.c b/mdadm.c index f5f64b56..925c01fe 100644 --- a/mdadm.c +++ b/mdadm.c @@ -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, diff --git a/super1.c b/super1.c index 62494a6e..afe29984 100644 --- a/super1.c +++ b/super1.c @@ -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; } -- 2.39.2