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 /Create.c | |
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>
Diffstat (limited to 'Create.c')
-rw-r--r-- | Create.c | 21 |
1 files changed, 21 insertions, 0 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", |