X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=util.c;h=e92be4fe608a214f4be96f6013e97f657b7ecc58;hp=1056ae4a299992ef2957484db61bcefce4868e64;hb=9e6d9291275267d3fd4b6d85d7232081f89cd8e2;hpb=f4db7a6f3c3b9a0701f3063b287b7cb59ccecd07 diff --git a/util.c b/util.c index 1056ae4a..e92be4fe 100644 --- a/util.c +++ b/util.c @@ -370,10 +370,14 @@ int enough_fd(int fd) array.raid_disks <= 0) return 0; avail = calloc(array.raid_disks, 1); - for (i=0; i 0; i++) { disk.number = i; if (ioctl(fd, GET_DISK_INFO, &disk) != 0) continue; + if (disk.major == 0 && disk.minor == 0) + continue; + array.nr_disks--; + if (! (disk.state & (1<= array.raid_disks) @@ -1256,10 +1260,13 @@ int check_partitions(int fd, char *dname, unsigned long long freesize, 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 < ainf->raid_disks + ainf->nr_disks ; d++) - if (ioctl(mdfd, GET_DISK_INFO, disk) == 0) + for (d = 0 ; d < 1024 ; d++) { + if (ioctl(mdfd, GET_DISK_INFO, disk) == 0 && + (disk->major || disk->minor)) return; + } } int open_container(int fd)