Raid limit of 1024 when scanning for devices.
When we can for devices using GET_DISK_INFO we currently limit to 1024. But some arrays can have more than this. So raise it to 4096 and make the constant a #define. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
ae2416e7b6
commit
480f356641
4
Manage.c
4
Manage.c
|
@ -462,7 +462,7 @@ int Manage_subdevs(char *devname, int fd,
|
||||||
dv->devname, dv->disposition);
|
dv->devname, dv->disposition);
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
for (; j < 1024 && remaining_disks > 0; j++) {
|
for (; j < MAX_DISKS && remaining_disks > 0; j++) {
|
||||||
unsigned dev;
|
unsigned dev;
|
||||||
disc.number = j;
|
disc.number = j;
|
||||||
if (ioctl(fd, GET_DISK_INFO, &disc))
|
if (ioctl(fd, GET_DISK_INFO, &disc))
|
||||||
|
@ -495,7 +495,7 @@ int Manage_subdevs(char *devname, int fd,
|
||||||
dv->devname, dv->disposition);
|
dv->devname, dv->disposition);
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
for (; j < 1024 && remaining_disks > 0; j++) {
|
for (; j < MAX_DISKS && remaining_disks > 0; j++) {
|
||||||
int sfd;
|
int sfd;
|
||||||
unsigned dev;
|
unsigned dev;
|
||||||
disc.number = j;
|
disc.number = j;
|
||||||
|
|
8
mdadm.h
8
mdadm.h
|
@ -1388,4 +1388,12 @@ static inline int xasprintf(char **strp, const char *fmt, ...) {
|
||||||
#define PROCESS_DELAYED -2
|
#define PROCESS_DELAYED -2
|
||||||
#define PROCESS_PENDING -3
|
#define PROCESS_PENDING -3
|
||||||
|
|
||||||
|
/* When using "GET_DISK_INFO" it isn't certain how high
|
||||||
|
* we need to check. So we impose an absolute limit of
|
||||||
|
* MAX_DISKS. This needs to be much more than the largest
|
||||||
|
* number of devices any metadata can support. Currently
|
||||||
|
* v1.x can support 1920
|
||||||
|
*/
|
||||||
|
#define MAX_DISKS 4096
|
||||||
|
|
||||||
extern int __offroot;
|
extern int __offroot;
|
||||||
|
|
4
util.c
4
util.c
|
@ -378,7 +378,7 @@ int enough_fd(int fd)
|
||||||
array.raid_disks <= 0)
|
array.raid_disks <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
avail = calloc(array.raid_disks, 1);
|
avail = calloc(array.raid_disks, 1);
|
||||||
for (i=0; i < 1024 && array.nr_disks > 0; i++) {
|
for (i=0; i < MAX_DISKS && array.nr_disks > 0; i++) {
|
||||||
disk.number = i;
|
disk.number = i;
|
||||||
if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
|
if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1275,7 +1275,7 @@ void get_one_disk(int mdfd, mdu_array_info_t *ainf, mdu_disk_info_t *disk)
|
||||||
int d;
|
int d;
|
||||||
|
|
||||||
ioctl(mdfd, GET_ARRAY_INFO, ainf);
|
ioctl(mdfd, GET_ARRAY_INFO, ainf);
|
||||||
for (d = 0 ; d < 1024 ; d++) {
|
for (d = 0 ; d < MAX_DISKS ; d++) {
|
||||||
if (ioctl(mdfd, GET_DISK_INFO, disk) == 0 &&
|
if (ioctl(mdfd, GET_DISK_INFO, disk) == 0 &&
|
||||||
(disk->major || disk->minor))
|
(disk->major || disk->minor))
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue