+ disks = xmalloc(max_disks * sizeof(mdu_disk_info_t));
+ for (d = 0; d < max_disks; d++) {
+ disks[d].state = (1<<MD_DISK_REMOVED);
+ disks[d].major = disks[d].minor = 0;
+ disks[d].number = disks[d].raid_disk = d;
+ }
+
+ next = array.raid_disks*2;
+ if (inactive) {
+ struct mdinfo *mdi;
+ if (sra != NULL)
+ for (mdi = sra->devs; mdi; mdi = mdi->next) {
+ disks[next++] = mdi->disk;
+ disks[next-1].number = -1;
+ }
+ } else for (d = 0; d < max_disks; d++) {
+ mdu_disk_info_t disk;
+ disk.number = d;
+ if (ioctl(fd, GET_DISK_INFO, &disk) < 0) {
+ if (d < array.raid_disks)
+ pr_err("cannot get device detail for device %d: %s\n",
+ d, strerror(errno));
+ continue;
+ }
+ if (disk.major == 0 && disk.minor == 0)
+ continue;
+ if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks
+ && disks[disk.raid_disk*2].state == (1<<MD_DISK_REMOVED))
+ disks[disk.raid_disk*2] = disk;
+ else if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks
+ && disks[disk.raid_disk*2+1].state == (1<<MD_DISK_REMOVED))
+ disks[disk.raid_disk*2+1] = disk;
+ else if (next < max_disks)
+ disks[next++] = disk;
+ }
+
+ avail = xcalloc(array.raid_disks, 1);
+
+ for (d= 0; d < array.raid_disks; d++) {
+
+ if ((disks[d*2].state & (1<<MD_DISK_SYNC)) ||
+ (disks[d*2+1].state & (1<<MD_DISK_SYNC))) {
+ avail_disks ++;
+ avail[d] = 1;
+ }
+ }
+
+ if (c->brief) {
+ mdu_bitmap_file_t bmf;
+ printf("%sARRAY %s", inactive ? "INACTIVE-":"", dev);
+ if (c->verbose > 0) {
+ if (array.raid_disks)
+ printf(" level=%s num-devices=%d",
+ str?str:"-unknown-",
+ array.raid_disks );
+ else if (!inactive)
+ printf(" level=container num-devices=%d",
+ array.nr_disks);
+ else
+ printf(" num-devices=%d", array.nr_disks);
+ }
+ if (container) {
+ printf(" container=%s", container);
+ printf(" member=%s", member);
+ } else {
+ if (sra && sra->array.major_version < 0)
+ printf(" metadata=%s", sra->text_version);
+ else
+ printf(" metadata=%d.%d",
+ array.major_version, array.minor_version);
+ }
+
+ /* Only try GET_BITMAP_FILE for 0.90.01 and later */
+ if (vers >= 9001 &&
+ ioctl(fd, GET_BITMAP_FILE, &bmf) == 0 &&
+ bmf.pathname[0]) {
+ printf(" bitmap=%s", bmf.pathname);
+ }