Prefer version-1 superblocks for v.large devices.

Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
Neil Brown 2006-01-31 00:01:48 +00:00
parent 6ee5c05a11
commit 576d6d83af
3 changed files with 23 additions and 9 deletions

View File

@ -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",

View File

@ -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,

View File

@ -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;
}