Increase max-devs on type-1 superblocks
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
This commit is contained in:
parent
8d75b7fce2
commit
ea32955930
7
Detail.c
7
Detail.c
|
@ -51,6 +51,7 @@ int Detail(char *dev, int brief, int test)
|
|||
int is_rebuilding = 0;
|
||||
int failed = 0;
|
||||
struct supertype *st = NULL;
|
||||
int max_disks = MD_SB_DISKS;
|
||||
|
||||
void *super = NULL;
|
||||
int rv = test ? 4 : 1;
|
||||
|
@ -89,8 +90,10 @@ int Detail(char *dev, int brief, int test)
|
|||
stb.st_rdev = 0;
|
||||
rv = 0;
|
||||
|
||||
if (st) max_disks = st->max_devs;
|
||||
|
||||
/* try to load a superblock */
|
||||
for (d= 0; d<MD_SB_DISKS; d++) {
|
||||
for (d= 0; d<max_disks; d++) {
|
||||
mdu_disk_info_t disk;
|
||||
char *dv;
|
||||
disk.number = d;
|
||||
|
@ -210,7 +213,7 @@ int Detail(char *dev, int brief, int test)
|
|||
|
||||
printf(" Number Major Minor RaidDevice State\n");
|
||||
}
|
||||
for (d= 0; d<MD_SB_DISKS; d++) {
|
||||
for (d= 0; d < max_disks; d++) {
|
||||
mdu_disk_info_t disk;
|
||||
char *dv;
|
||||
disk.number = d;
|
||||
|
|
2
Grow.c
2
Grow.c
|
@ -236,7 +236,7 @@ int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay)
|
|||
}
|
||||
if (strcmp(file, "internal") == 0) {
|
||||
int d;
|
||||
for (d=0; d< MD_SB_DISKS; d++) {
|
||||
for (d=0; d< st->max_devs; d++) {
|
||||
mdu_disk_info_t disk;
|
||||
char *dv;
|
||||
disk.number = d;
|
||||
|
|
6
mdadm.c
6
mdadm.c
|
@ -50,6 +50,7 @@ int main(int argc, char *argv[])
|
|||
int level = UnSet;
|
||||
int layout = UnSet;
|
||||
int raiddisks = 0;
|
||||
int max_disks = MD_SB_DISKS;
|
||||
int sparedisks = 0;
|
||||
struct mddev_ident_s ident;
|
||||
char *configfile = NULL;
|
||||
|
@ -302,6 +303,7 @@ int main(int argc, char *argv[])
|
|||
fprintf(stderr, Name ": unrecognised metadata identifier: %s\n", optarg);
|
||||
exit(2);
|
||||
}
|
||||
max_disks = ss->max_devs;
|
||||
continue;
|
||||
|
||||
case O(GROW,'z'):
|
||||
|
@ -425,7 +427,7 @@ int main(int argc, char *argv[])
|
|||
exit(2);
|
||||
}
|
||||
raiddisks = strtol(optarg, &c, 10);
|
||||
if (!optarg[0] || *c || raiddisks<=0 || raiddisks > MD_SB_DISKS) {
|
||||
if (!optarg[0] || *c || raiddisks<=0 || raiddisks > max_disks) {
|
||||
fprintf(stderr, Name ": invalid number of raid devices: %s\n",
|
||||
optarg);
|
||||
exit(2);
|
||||
|
@ -451,7 +453,7 @@ int main(int argc, char *argv[])
|
|||
exit(2);
|
||||
}
|
||||
sparedisks = strtol(optarg, &c, 10);
|
||||
if (!optarg[0] || *c || sparedisks < 0 || sparedisks > MD_SB_DISKS - raiddisks) {
|
||||
if (!optarg[0] || *c || sparedisks < 0 || sparedisks > max_disks - raiddisks) {
|
||||
fprintf(stderr, Name ": invalid number of spare-devices: %s\n",
|
||||
optarg);
|
||||
exit(2);
|
||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -194,6 +194,7 @@ extern struct superswitch {
|
|||
struct supertype {
|
||||
struct superswitch *ss;
|
||||
int minor_version;
|
||||
int max_devs;
|
||||
};
|
||||
|
||||
extern struct supertype *super_by_version(int vers, int minor);
|
||||
|
|
2
super0.c
2
super0.c
|
@ -589,6 +589,7 @@ static int load_super0(struct supertype *st, int fd, void **sbp, char *devname)
|
|||
if (st->ss == NULL) {
|
||||
st->ss = &super0;
|
||||
st->minor_version = 90;
|
||||
st->max_devs = MD_SB_DISKS;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -601,6 +602,7 @@ static struct supertype *match_metadata_desc0(char *arg)
|
|||
|
||||
st->ss = &super0;
|
||||
st->minor_version = 90;
|
||||
st->max_devs = MD_SB_DISKS;
|
||||
if (strcmp(arg, "0") == 0 ||
|
||||
strcmp(arg, "0.90") == 0 ||
|
||||
strcmp(arg, "default") == 0
|
||||
|
|
4
super1.c
4
super1.c
|
@ -399,7 +399,7 @@ static int init_super1(void **sbp, mdu_array_info_t *info)
|
|||
|
||||
sb->ctime = __cpu_to_le64((unsigned long long)time(0));
|
||||
sb->level = __cpu_to_le32(info->level);
|
||||
sb->layout = __cpu_to_le32(info->level);
|
||||
sb->layout = __cpu_to_le32(info->layout);
|
||||
sb->size = __cpu_to_le64(info->size*2ULL);
|
||||
sb->chunksize = __cpu_to_le32(info->chunk_size>>9);
|
||||
sb->raid_disks = __cpu_to_le32(info->raid_disks);
|
||||
|
@ -621,6 +621,7 @@ static int load_super1(struct supertype *st, int fd, void **sbp, char *devname)
|
|||
int rv;
|
||||
st->minor_version = bestvers;
|
||||
st->ss = &super1;
|
||||
st->max_devs = 384;
|
||||
rv = load_super1(st, fd, sbp, devname);
|
||||
if (rv) st->ss = NULL;
|
||||
return rv;
|
||||
|
@ -719,6 +720,7 @@ static struct supertype *match_metadata_desc1(char *arg)
|
|||
if (!st) return st;
|
||||
|
||||
st->ss = &super1;
|
||||
st->max_devs = 384;
|
||||
if (strcmp(arg, "1") == 0 ||
|
||||
strcmp(arg, "1.0") == 0) {
|
||||
st->minor_version = 0;
|
||||
|
|
Loading…
Reference in New Issue