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:
Neil Brown 2006-03-28 23:02:45 +00:00
parent bed256c241
commit e27d562bcc
3 changed files with 19 additions and 9 deletions

View File

@ -53,7 +53,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;
int max_disks = MD_SB_DISKS; /* just a default */
struct mdinfo info;
void *super = NULL;

View File

@ -46,6 +46,11 @@ static char *percentalerts[] = {
"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,
char *mailaddr, char *alert_cmd,
int period, int daemonise, int scan, int oneshot,
@ -101,8 +106,8 @@ int Monitor(mddev_dev_t devlist,
char *spare_group;
int active, working, failed, spare, raid;
int expected_spares;
int devstate[MD_SB_DISKS];
int devid[MD_SB_DISKS];
int devstate[MaxDisks];
int devid[MaxDisks];
int percent;
struct state *next;
} *statelist = NULL;
@ -300,21 +305,26 @@ int Monitor(mddev_dev_t devlist,
if (mse)
st->percent = mse->percent;
for (i=0; i<MD_SB_DISKS; i++) {
for (i=0; i<MaxDisks; i++) {
mdu_disk_info_t disc;
int newstate=0;
int change;
char *dv = NULL;
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;
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]) {
case 'U': newstate = 6 /* ACTIVE/SYNC */; break;
case '_': newstate = 0; break;
}
disc.major = disc.minor = 0;
}
if (dv == NULL && st->devid[i])
dv = map_dev(major(st->devid[i]),
minor(st->devid[i]), 1);
@ -412,7 +422,7 @@ int Monitor(mddev_dev_t devlist,
if (fd2>=0) close(fd2);
continue;
}
for (d=st2->raid; d<MD_SB_DISKS; d++) {
for (d=st2->raid; d < MaxDisks; d++) {
if (st2->devid[d] > 0 &&
st2->devstate[d] == 0) {
dev = st2->devid[d];

View File

@ -49,7 +49,7 @@ int main(int argc, char *argv[])
int level = UnSet;
int layout = UnSet;
int raiddisks = 0;
int max_disks = MD_SB_DISKS;
int max_disks = MD_SB_DISKS; /* just a default */
int sparedisks = 0;
struct mddev_ident_s ident;
char *configfile = NULL;