]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Detail.c
Improve reporting of layout for raid10.
[thirdparty/mdadm.git] / Detail.c
index de1f409e8fe8498fc100e963f42f30a7c0095b1c..25b91b1e256b5cdf94fe9ff3d69a052de024f6cb 100644 (file)
--- a/Detail.c
+++ b/Detail.c
@@ -38,7 +38,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
         * GET_ARRAY_INFO and GET_DISK_INFO ioctl calls
         */
 
-       int fd = open(dev, O_RDONLY, 0);
+       int fd = open(dev, O_RDONLY);
        int vers;
        mdu_array_info_t array;
        mdu_disk_info_t *disks;
@@ -142,11 +142,12 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                               array.major_version, array.minor_version);
 
                if (st && st->sb)
-                       st->ss->export_super(st);
+                       st->ss->export_detail_super(st);
                goto out;
        }
 
        if (brief) {
+               mdu_bitmap_file_t bmf;
                printf("ARRAY %s level=%s num-devices=%d", dev,
                       c?c:"-unknown-",
                       array.raid_disks );
@@ -155,6 +156,13 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                else
                        printf(" metadata=%02d.%02d",
                               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);
+               }
        } else {
                mdu_bitmap_file_t bmf;
                unsigned long long larray_size;
@@ -191,7 +199,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                                if (dsize > 0)
                                        printf("  Used Dev Size : %llu%s\n",
                                               dsize,
-                                        human_size((long long)array.size<<10));
+                                        human_size((long long)dsize<<10));
                                else
                                        printf("  Used Dev Size : unknown\n");
                        } else
@@ -231,9 +239,9 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
                        printf("         Layout : %s\n", c?c:"-unknown-");
                }
                if (array.level == 10) {
-                       printf("         Layout : near=%d, %s=%d\n",
-                              array.layout&255, (array.layout&0x10000)?"offset":"far",
-                              (array.layout>>8)&255);
+                       printf("         Layout :");
+                       print_r10_layout(array.layout);
+                       printf("\n");
                }
                switch (array.level) {
                case 0: