Remove 'major' from superswitch.

It isn't generally meaningful.
This commit is contained in:
Neil Brown 2008-07-12 20:27:37 +10:00
parent 1522c538b1
commit b8ac196795
10 changed files with 34 additions and 50 deletions

View File

@ -542,8 +542,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
== devices[devcnt].i.events
&& (devices[best[i]].i.disk.minor
!= devices[devcnt].i.disk.minor)
&& st->ss->major == 0
&& info.array.level != -4) {
&& st->ss == &super0
&& info.array.level != LEVEL_MULTIPATH) {
/* two different devices with identical superblock.
* Could be a mis-detection caused by overlapping
* partitions. fail-safe.
@ -866,8 +866,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
if ((vers % 100) >= 1) { /* can use different versions */
mdu_array_info_t inf;
memset(&inf, 0, sizeof(inf));
inf.major_version = st->ss->major;
inf.minor_version = st->minor_version;
inf.major_version = info.array.major_version;
inf.minor_version = info.array.minor_version;
rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
} else
rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);

View File

@ -76,6 +76,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
unsigned long long bitmapsize;
struct mdinfo *sra;
struct mdinfo info;
int did_default = 0;
int major_num = BITMAP_MAJOR_HI;
@ -289,12 +290,9 @@ int Create(struct supertype *st, char *mddev, int mdfd,
dname);
exit(2);
}
if (st->ss->major != 0 ||
if (st->ss != &super0 ||
st->minor_version != 90)
fprintf(stderr, Name ": Defaulting to version"
" %d.%d metadata\n",
st->ss->major,
st->minor_version);
did_default = 1;
} else {
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
@ -356,9 +354,12 @@ int Create(struct supertype *st, char *mddev, int mdfd,
}
if (level > 0 || level == LEVEL_MULTIPATH
|| level == LEVEL_FAULTY
|| (st && st->ss->external) ) {
|| st->ss->external ) {
/* size is meaningful */
if (minsize > 0x100000000ULL && st->ss->major == 0) {
if (!st->ss->validate_geometry(st, level, layout,
raiddisks,
chunk, minsize,
NULL, NULL)) {
fprintf(stderr, Name ": devices too large for RAID level %d\n", level);
return 1;
}
@ -485,7 +486,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
+ info.array.failed_disks;
info.array.layout = layout;
info.array.chunk_size = chunk*1024;
info.array.major_version = st->ss->major;
info.array.major_version = 0; /* Flag to say "not zeroing superblock" */
if (name == NULL || *name == 0) {
/* base name on mddev */
@ -516,6 +517,10 @@ int Create(struct supertype *st, char *mddev, int mdfd,
st->ss->getinfo_super(st, &info);
if (did_default)
fprintf(stderr, Name ": Defaulting to version"
" %s metadata\n", info.text_version);
if (bitmap_file && vers < 9003) {
major_num = BITMAP_MAJOR_HOSTENDIAN;
#ifdef __BIG_ENDIAN
@ -586,8 +591,8 @@ int Create(struct supertype *st, char *mddev, int mdfd,
} else if ((vers % 100) >= 1) { /* can use different versions */
mdu_array_info_t inf;
memset(&inf, 0, sizeof(inf));
inf.major_version = st->ss->major;
inf.minor_version = st->minor_version;
inf.major_version = info.array.major_version;
inf.minor_version = info.array.minor_version;
rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
} else
rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);

View File

@ -300,12 +300,11 @@ int Incremental(char *devname, int verbose, int runstop,
/* - add the device */
mdu_array_info_t ainf;
mdu_disk_info_t disk;
char md[20];
struct mdinfo *sra;
memset(&ainf, 0, sizeof(ainf));
ainf.major_version = st->ss->major;
ainf.minor_version = st->minor_version;
ainf.major_version = info.array.major_version;
ainf.minor_version = info.array.minor_version;
if (ioctl(mdfd, SET_ARRAY_INFO, &ainf) != 0) {
fprintf(stderr, Name
": SET_ARRAY_INFO failed for %s: %s\b",
@ -313,9 +312,8 @@ int Incremental(char *devname, int verbose, int runstop,
close(mdfd);
return 2;
}
sprintf(md, "%d.%d\n", st->ss->major, st->minor_version);
sra = sysfs_read(mdfd, devnum, GET_VERSION);
sysfs_set_str(sra, NULL, "metadata_version", md);
sysfs_set_str(sra, NULL, "metadata_version", info.text_version);
memset(&disk, 0, sizeof(disk));
disk.major = major(stb.st_rdev);
disk.minor = minor(stb.st_rdev);
@ -352,29 +350,18 @@ int Incremental(char *devname, int verbose, int runstop,
int err;
struct mdinfo *sra;
struct supertype *st2;
sra = sysfs_read(mdfd, devnum, (GET_VERSION | GET_DEVS |
GET_STATE));
sra = sysfs_read(mdfd, devnum, (GET_DEVS | GET_STATE));
if (sra->array.major_version != st->ss->major ||
sra->array.minor_version != st->minor_version) {
if (verbose >= 0)
fprintf(stderr, Name
": %s has different metadata to chosen array %s %d.%d %d.%d.\n",
devname, chosen_name,
sra->array.major_version,
sra->array.minor_version,
st->ss->major, st->minor_version);
close(mdfd);
return 1;
}
sprintf(dn, "%d:%d", sra->devs->disk.major,
sra->devs->disk.minor);
dfd2 = dev_open(dn, O_RDONLY);
st2 = dup_super(st);
if (st2->ss->load_super(st2, dfd2, NULL)) {
if (st2->ss->load_super(st2, dfd2, NULL) ||
st->ss->compare_super(st, st2) != 0) {
fprintf(stderr, Name
": Strange error loading metadata for %s.\n",
chosen_name);
": metadata mismatch between %s and "
"chosen array %s\n",
devname, chosen_name);
close(mdfd);
close(dfd2);
return 2;

View File

@ -96,7 +96,7 @@ int Query(char *dev)
if (superror == 0) {
/* array might be active... */
st->ss->getinfo_super(st, &info);
if (st->ss->major == 0) {
if (st->ss == &super0) {
mddev = get_md_name(info.array.md_minor);
disc.number = info.disk.number;
activity = "undetected";
@ -121,7 +121,7 @@ int Query(char *dev)
activity,
map_num(pers, info.array.level),
mddev);
if (st->ss->major == 0)
if (st->ss == &super0)
put_md_name(mddev);
}
return 0;

View File

@ -448,7 +448,6 @@ extern struct superswitch {
struct mdinfo *(*activate_spare)(struct active_array *a,
struct metadata_update **updates);
int major;
int swapuuid; /* true if uuid is bigending rather than hostendian */
int external;
} super0, super1, super_ddf, super_ddf_bvd, super_ddf_svd, *superlist[];

View File

@ -3119,7 +3119,6 @@ struct superswitch super_ddf = {
.match_metadata_desc = match_metadata_desc_ddf,
.getinfo_super_n = getinfo_super_n_container,
.major = 1000,
.swapuuid = 0,
.external = 1,
@ -3152,7 +3151,6 @@ struct superswitch super_ddf_container = {
.container_content = container_content_ddf,
.getinfo_super_n = getinfo_super_n_container,
.major = 1000,
.swapuuid = 0,
.external = 1,
};
@ -3174,7 +3172,6 @@ struct superswitch super_ddf_bvd = {
.free_super = free_super_ddf,
.match_metadata_desc = match_metadata_desc_ddf_bvd,
.major = 1001,
.swapuuid = 0,
.external = 2,
};
@ -3192,7 +3189,6 @@ struct superswitch super_ddf_svd = {
.free_super = free_super_ddf,
.match_metadata_desc = match_metadata_desc_ddf_svd,
.major = 1002,
.swapuuid = 0,
.external = 2,
};

View File

@ -1873,7 +1873,6 @@ struct superswitch super_imsm = {
.getinfo_super_n = getinfo_super_n_imsm_container,
.validate_geometry = validate_geometry_imsm,
.major = 2000,
.swapuuid = 0,
.external = 1,
@ -1909,7 +1908,6 @@ struct superswitch super_imsm_container = {
.container_content = container_content_imsm,
.major = 2000,
.swapuuid = 0,
.external = 1,
};
@ -1928,7 +1926,6 @@ struct superswitch super_imsm_volume = {
.validate_geometry = validate_geometry_imsm_volume,
.major = 2001,
.swapuuid = 0,
.external = 2,
};

View File

@ -1089,6 +1089,5 @@ struct superswitch super0 = {
.write_bitmap = write_bitmap0,
.free_super = free_super0,
.validate_geometry = validate_geometry0,
.major = 0,
.swapuuid = 0,
};

View File

@ -493,7 +493,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info)
int role;
info->array.major_version = 1;
info->array.minor_version = __le32_to_cpu(sb->feature_map);
info->array.minor_version = st->minor_version;
info->array.patch_version = 0;
info->array.raid_disks = __le32_to_cpu(sb->raid_disks);
info->array.level = __le32_to_cpu(sb->level);
@ -1502,7 +1502,6 @@ struct superswitch super1 = {
.write_bitmap = write_bitmap1,
.free_super = free_super1,
.validate_geometry = validate_geometry1,
.major = 1,
#if __BYTE_ORDER == BIG_ENDIAN
.swapuuid = 0,
#else

View File

@ -134,10 +134,12 @@ struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options)
sra->array.major_version = -1;
sra->array.minor_version = -2;
strcpy(sra->text_version, buf+9);
} else
} else {
sscanf(buf, "%d.%d",
&sra->array.major_version,
&sra->array.minor_version);
strcpy(sra->text_version, buf);
}
}
if (options & GET_LEVEL) {
strcpy(base, "level");