]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Detail.c
Add 'supertype' arg to almost all metadata methods.
[thirdparty/mdadm.git] / Detail.c
index ed100fa1bbba104507884cd6c8e86d5ce1571877..cebba6ee61c688a73cbcae459fc2c07fe3438e8f 100644 (file)
--- a/Detail.c
+++ b/Detail.c
@@ -116,10 +116,10 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                                int fd2 = dev_open(dv, O_RDONLY);
                                if (fd2 >=0 && st &&
                                    st->ss->load_super(st, fd2, &super, NULL) == 0) {
-                                       st->ss->getinfo_super(&info, super);
+                                       st->ss->getinfo_super(st, &info, super);
                                        if (info.array.ctime != array.ctime ||
                                            info.array.level != array.level) {
-                                               free(super);
+                                               st->ss->free_super(st, super);
                                                super = NULL;
                                        }
                                }
@@ -138,12 +138,15 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                printf("MD_METADATA=%d.%d\n", array.major_version,
                       array.minor_version);
                if (super)
-                       st->ss->export_super(super);
+                       st->ss->export_super(st, super);
                goto out;
        }
 
        if (brief)
-               printf("ARRAY %s level=%s num-devices=%d", dev, c?c:"-unknown-",array.raid_disks );
+               printf("ARRAY %s level=%s metadata=%d.%d num-devices=%d", dev,
+                      c?c:"-unknown-",
+                      array.major_version, array.minor_version,
+                      array.raid_disks );
        else {
                mdu_bitmap_file_t bmf;
                unsigned long long larray_size;
@@ -230,7 +233,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                        break;
                default: break;
                }
-       
+
                if (e && e->percent >= 0) {
                        printf(" Re%s Status : %d%% complete\n",
                               (super && info.reshape_active)? "shape":"build",
@@ -275,7 +278,7 @@ This is pretty boring
                } else if (e && e->percent >= 0)
                        printf("\n");
                if (super && st)
-                       st->ss->detail_super(super, homehost);
+                       st->ss->detail_super(st, super, homehost);
 
                printf("    Number   Major   Minor   RaidDevice State\n");
        }
@@ -298,7 +301,7 @@ This is pretty boring
                }
                if (disk.major == 0 && disk.minor == 0)
                        continue;
-               if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks) 
+               if (disk.raid_disk >= 0 && disk.raid_disk < array.raid_disks)
                        disks[disk.raid_disk] = disk;
                else if (next < max_disks)
                        disks[next++] = disk;
@@ -316,13 +319,13 @@ This is pretty boring
                if (!brief) {
                        if (d == array.raid_disks) printf("\n");
                        if (disk.raid_disk < 0)
-                               printf("   %5d   %5d    %5d        -     ", 
+                               printf("   %5d   %5d    %5d        -     ",
                                       disk.number, disk.major, disk.minor);
                        else
-                               printf("   %5d   %5d    %5d    %5d     ", 
+                               printf("   %5d   %5d    %5d    %5d     ",
                                       disk.number, disk.major, disk.minor, disk.raid_disk);
-                       if (disk.state & (1<<MD_DISK_FAULTY)) { 
-                               printf(" faulty"); 
+                       if (disk.state & (1<<MD_DISK_FAULTY)) {
+                               printf(" faulty");
                                if (disk.raid_disk < array.raid_disks &&
                                    disk.raid_disk >= 0)
                                        failed++;
@@ -374,7 +377,9 @@ This is pretty boring
        }
        if (spares && brief) printf(" spares=%d", spares);
        if (super && brief && st)
-               st->ss->brief_detail_super(super);
+               st->ss->brief_detail_super(st, super);
+       if (super)
+               st->ss->free_super(st, super);
 
        if (brief > 1 && devices) printf("\n   devices=%s", devices);
        if (brief) printf("\n");