+
+ if (e && e->percent >= 0) {
+ printf(" Re%s Status : %d%% complete\n",
+ (st && st->sb && info.reshape_active)?
+ "shape":"build",
+ e->percent);
+ is_rebuilding = 1;
+ }
+ free_mdstat(ms);
+
+ if (st->sb && info.reshape_active) {
+#if 0
+This is pretty boring
+ printf(" Reshape pos'n : %llu%s\n", (unsigned long long) info.reshape_progress<<9,
+ human_size(info.reshape_progress<<9));
+#endif
+ if (info.delta_disks > 0)
+ printf(" Delta Devices : %d, (%d->%d)\n",
+ info.delta_disks, array.raid_disks - info.delta_disks, array.raid_disks);
+ if (info.delta_disks < 0)
+ printf(" Delta Devices : %d, (%d->%d)\n",
+ info.delta_disks, array.raid_disks, array.raid_disks + info.delta_disks);
+ if (info.new_level != array.level) {
+ char *c = map_num(pers, info.new_level);
+ printf(" New Level : %s\n", c?c:"-unknown-");
+ }
+ if (info.new_level != array.level ||
+ info.new_layout != array.layout) {
+ if (info.new_level == 5) {
+ char *c = map_num(r5layout, info.new_layout);
+ printf(" New Layout : %s\n",
+ c?c:"-unknown-");
+ }
+ if (info.new_level == 10) {
+ printf(" New Layout : near=%d, %s=%d\n",
+ info.new_layout&255,
+ (info.new_layout&0x10000)?"offset":"far",
+ (info.new_layout>>8)&255);
+ }
+ }
+ if (info.new_chunk != array.chunk_size)
+ printf(" New Chunksize : %dK\n", info.new_chunk/1024);
+ printf("\n");
+ } else if (e && e->percent >= 0)
+ printf("\n");
+ if (st && st->sb)
+ st->ss->detail_super(st, homehost);
+
+ if (array.raid_disks == 0 && sra && sra->array.major_version == -1
+ && sra->array.minor_version == -2 && sra->text_version[0] != '/') {
+ /* This looks like a container. Find any active arrays
+ * That claim to be a member.
+ */
+ DIR *dir = opendir("/sys/block");
+ struct dirent *de;
+
+ printf(" Member Arrays :");
+
+ while (dir && (de = readdir(dir)) != NULL) {
+ char path[200];
+ char vbuf[1024];
+ int nlen = strlen(sra->sys_name);
+ int dn;
+ if (de->d_name[0] == '.')
+ continue;
+ sprintf(path, "/sys/block/%s/md/metadata_version",
+ de->d_name);
+ if (load_sys(path, vbuf) < 0)
+ continue;
+ if (strncmp(vbuf, "external:", 9) != 0 ||
+ !is_subarray(sra->sys_name+9) ||
+ strncmp(vbuf+10, sra->sys_name, nlen) != 0 ||
+ vbuf[10+nlen] != '/')
+ continue;
+ dn = devname2devnum(de->d_name);
+ printf(" %s", map_dev(dev2major(dn),
+ dev2minor(dn), 1));
+ }
+ if (dir)
+ closedir(dir);
+ printf("\n\n");
+ }
+
+ if (array.raid_disks)
+ printf(" Number Major Minor RaidDevice State\n");
+ else
+ printf(" Number Major Minor RaidDevice\n");
+ }
+ disks = malloc(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;