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);
|
||||
goto abort;
|
||||
}
|
||||
for (; j < 1024 && remaining_disks > 0; j++) {
|
||||
for (; j < MAX_DISKS && remaining_disks > 0; j++) {
|
||||
unsigned dev;
|
||||
disc.number = j;
|
||||
if (ioctl(fd, GET_DISK_INFO, &disc))
|
||||
|
@ -495,7 +495,7 @@ int Manage_subdevs(char *devname, int fd,
|
|||
dv->devname, dv->disposition);
|
||||
goto abort;
|
||||
}
|
||||
for (; j < 1024 && remaining_disks > 0; j++) {
|
||||
for (; j < MAX_DISKS && remaining_disks > 0; j++) {
|
||||
int sfd;
|
||||
unsigned dev;
|
||||
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_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;
|
||||
|
|
4
util.c
4
util.c
|
@ -378,7 +378,7 @@ int enough_fd(int fd)
|
|||
array.raid_disks <= 0)
|
||||
return 0;
|
||||
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;
|
||||
if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
|
||||
continue;
|
||||
|
@ -1275,7 +1275,7 @@ void get_one_disk(int mdfd, mdu_array_info_t *ainf, mdu_disk_info_t *disk)
|
|||
int d;
|
||||
|
||||
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 &&
|
||||
(disk->major || disk->minor))
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue