Reduce dependance on MD_SB_DISKS
--monitor should now work with arrays larger than 28 devices. Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
parent
bed256c241
commit
e27d562bcc
2
Detail.c
2
Detail.c
|
@ -53,7 +53,7 @@ int Detail(char *dev, int brief, int test)
|
||||||
int is_rebuilding = 0;
|
int is_rebuilding = 0;
|
||||||
int failed = 0;
|
int failed = 0;
|
||||||
struct supertype *st = NULL;
|
struct supertype *st = NULL;
|
||||||
int max_disks = MD_SB_DISKS;
|
int max_disks = MD_SB_DISKS; /* just a default */
|
||||||
struct mdinfo info;
|
struct mdinfo info;
|
||||||
|
|
||||||
void *super = NULL;
|
void *super = NULL;
|
||||||
|
|
24
Monitor.c
24
Monitor.c
|
@ -46,6 +46,11 @@ static char *percentalerts[] = {
|
||||||
"Rebuild80",
|
"Rebuild80",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* The largest number of disks current arrays can manage is 384
|
||||||
|
* This really should be dynamically, but that will have to wait
|
||||||
|
* At least it isn't MD_SB_DISKS.
|
||||||
|
*/
|
||||||
|
#define MaxDisks 384
|
||||||
int Monitor(mddev_dev_t devlist,
|
int Monitor(mddev_dev_t devlist,
|
||||||
char *mailaddr, char *alert_cmd,
|
char *mailaddr, char *alert_cmd,
|
||||||
int period, int daemonise, int scan, int oneshot,
|
int period, int daemonise, int scan, int oneshot,
|
||||||
|
@ -101,8 +106,8 @@ int Monitor(mddev_dev_t devlist,
|
||||||
char *spare_group;
|
char *spare_group;
|
||||||
int active, working, failed, spare, raid;
|
int active, working, failed, spare, raid;
|
||||||
int expected_spares;
|
int expected_spares;
|
||||||
int devstate[MD_SB_DISKS];
|
int devstate[MaxDisks];
|
||||||
int devid[MD_SB_DISKS];
|
int devid[MaxDisks];
|
||||||
int percent;
|
int percent;
|
||||||
struct state *next;
|
struct state *next;
|
||||||
} *statelist = NULL;
|
} *statelist = NULL;
|
||||||
|
@ -300,21 +305,26 @@ int Monitor(mddev_dev_t devlist,
|
||||||
|
|
||||||
if (mse)
|
if (mse)
|
||||||
st->percent = mse->percent;
|
st->percent = mse->percent;
|
||||||
|
|
||||||
for (i=0; i<MD_SB_DISKS; i++) {
|
for (i=0; i<MaxDisks; i++) {
|
||||||
mdu_disk_info_t disc;
|
mdu_disk_info_t disc;
|
||||||
int newstate=0;
|
int newstate=0;
|
||||||
int change;
|
int change;
|
||||||
char *dv = NULL;
|
char *dv = NULL;
|
||||||
disc.number = i;
|
disc.number = i;
|
||||||
if (ioctl(fd, GET_DISK_INFO, &disc)>= 0) {
|
if (i > array.raid_disks + array.nr_disks) {
|
||||||
|
newstate = 0;
|
||||||
|
disc.major = disc.minor = 0;
|
||||||
|
} else if (ioctl(fd, GET_DISK_INFO, &disc)>= 0) {
|
||||||
newstate = disc.state;
|
newstate = disc.state;
|
||||||
dv = map_dev(disc.major, disc.minor, 1);
|
dv = map_dev(disc.major, disc.minor, 1);
|
||||||
} else if (mse && mse->pattern && i < strlen(mse->pattern))
|
} else if (mse && mse->pattern && i < strlen(mse->pattern)) {
|
||||||
switch(mse->pattern[i]) {
|
switch(mse->pattern[i]) {
|
||||||
case 'U': newstate = 6 /* ACTIVE/SYNC */; break;
|
case 'U': newstate = 6 /* ACTIVE/SYNC */; break;
|
||||||
case '_': newstate = 0; break;
|
case '_': newstate = 0; break;
|
||||||
}
|
}
|
||||||
|
disc.major = disc.minor = 0;
|
||||||
|
}
|
||||||
if (dv == NULL && st->devid[i])
|
if (dv == NULL && st->devid[i])
|
||||||
dv = map_dev(major(st->devid[i]),
|
dv = map_dev(major(st->devid[i]),
|
||||||
minor(st->devid[i]), 1);
|
minor(st->devid[i]), 1);
|
||||||
|
@ -412,7 +422,7 @@ int Monitor(mddev_dev_t devlist,
|
||||||
if (fd2>=0) close(fd2);
|
if (fd2>=0) close(fd2);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (d=st2->raid; d<MD_SB_DISKS; d++) {
|
for (d=st2->raid; d < MaxDisks; d++) {
|
||||||
if (st2->devid[d] > 0 &&
|
if (st2->devid[d] > 0 &&
|
||||||
st2->devstate[d] == 0) {
|
st2->devstate[d] == 0) {
|
||||||
dev = st2->devid[d];
|
dev = st2->devid[d];
|
||||||
|
|
2
mdadm.c
2
mdadm.c
|
@ -49,7 +49,7 @@ int main(int argc, char *argv[])
|
||||||
int level = UnSet;
|
int level = UnSet;
|
||||||
int layout = UnSet;
|
int layout = UnSet;
|
||||||
int raiddisks = 0;
|
int raiddisks = 0;
|
||||||
int max_disks = MD_SB_DISKS;
|
int max_disks = MD_SB_DISKS; /* just a default */
|
||||||
int sparedisks = 0;
|
int sparedisks = 0;
|
||||||
struct mddev_ident_s ident;
|
struct mddev_ident_s ident;
|
||||||
char *configfile = NULL;
|
char *configfile = NULL;
|
||||||
|
|
Loading…
Reference in New Issue