summaryrefslogtreecommitdiffstats
path: root/Create.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-01-31 00:01:48 +0000
committerNeil Brown <neilb@suse.de>2006-01-31 00:01:48 +0000
commit576d6d83af3e684bda417493cf64aab3ce235ab2 (patch)
tree67438281f1ad7beced6cea2cb4a1f2b6dce9561d /Create.c
parent6ee5c05a11a7c5160178e6eb21a30d294f56f235 (diff)
downloadmdadm-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>
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/Create.c b/Create.c
index 7fbf9c0..71bab18 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",