]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super0.c
Improve reporting of layout for raid10.
[thirdparty/mdadm.git] / super0.c
index 0cff1ef02bcedd25e5f2a3d1fc44ef33d7c24889..71dc39ce4a0dec2ccbb18c0d67ad19e09d636fca 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -179,17 +179,18 @@ static void examine_super0(struct supertype *st, char *homehost)
                printf("       Checksum : %x - correct\n", sb->sb_csum);
        else
                printf("       Checksum : %x - expected %lx\n", sb->sb_csum, calc_sb0_csum(sb));
-       printf("         Events : %d.%d\n", sb->events_hi, sb->events_lo);
+       printf("         Events : %llu\n",
+              ((unsigned long long)sb->events_hi << 32)
+              + sb->events_lo);
        printf("\n");
        if (sb->level == 5) {
                c = map_num(r5layout, sb->layout);
                printf("         Layout : %s\n", c?c:"-unknown-");
        }
        if (sb->level == 10) {
-               printf("         Layout : near=%d, %s=%d\n",
-                      sb->layout&255,
-                      (sb->layout&0x10000)?"offset":"far",
-                      (sb->layout>>8)&255);
+               printf("         Layout :");
+               print_r10_layout(sb->layout);
+               printf("\n");
        }
        switch(sb->level) {
        case 0:
@@ -250,6 +251,25 @@ static void brief_examine_super0(struct supertype *st)
        printf("\n");
 }
 
+static void export_examine_super0(struct supertype *st)
+{
+       mdp_super_t *sb = st->sb;
+
+       printf("MD_LEVEL=%s\n", map_num(pers, sb->level));
+       printf("MD_DEVICES=%d\n", sb->raid_disks);
+       if (sb->minor_version >= 90)
+               printf("MD_UUID=%08x:%08x:%08x:%08x\n",
+                      sb->set_uuid0, sb->set_uuid1,
+                      sb->set_uuid2, sb->set_uuid3);
+       else
+               printf("MD_UUID=%08x\n", sb->set_uuid0);
+       printf("MD_UPDATE_TIME=%llu\n",
+              __le64_to_cpu(sb->ctime) & 0xFFFFFFFFFFULL);
+       printf("MD_EVENTS=%llu\n",
+              ((unsigned long long)sb->events_hi << 32)
+              + sb->events_lo);
+}
+
 static void detail_super0(struct supertype *st, char *homehost)
 {
        mdp_super_t *sb = st->sb;
@@ -281,7 +301,7 @@ static void brief_detail_super0(struct supertype *st)
                printf("%08x", sb->set_uuid0);
 }
 
-static void export_super0(struct supertype *st)
+static void export_detail_super0(struct supertype *st)
 {
        mdp_super_t *sb = st->sb;
        printf("MD_UUID=");
@@ -789,7 +809,7 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
        if (st->ss == NULL) {
                st->ss = &super0;
-               st->minor_version = 90;
+               st->minor_version = super->minor_version;
                st->max_devs = MD_SB_DISKS;
        }
 
@@ -828,12 +848,18 @@ static struct supertype *match_metadata_desc0(char *arg)
        st->sb = NULL;
        if (strcmp(arg, "0") == 0 ||
            strcmp(arg, "0.90") == 0 ||
-           strcmp(arg, "default") == 0
+           strcmp(arg, "default") == 0 ||
+           strcmp(arg, "") == 0 /* no metadata */
                )
                return st;
 
+       st->minor_version = 91; /* reshape in progress */
+       if (strcmp(arg, "0.91") == 0) /* For dup_super support */
+               return st;
+
        st->minor_version = 9; /* flag for 'byte-swapped' */
-       if (strcmp(arg, "0.swap")==0)
+       if (strcmp(arg, "0.swap")==0 ||
+           strcmp(arg, "0.9") == 0) /* For dup_super support */
                return st;
 
        free(st);
@@ -971,9 +997,10 @@ struct superswitch super0 = {
 #ifndef MDASSEMBLE
        .examine_super = examine_super0,
        .brief_examine_super = brief_examine_super0,
+       .export_examine_super = export_examine_super0,
        .detail_super = detail_super0,
        .brief_detail_super = brief_detail_super0,
-       .export_super = export_super0,
+       .export_detail_super = export_detail_super0,
 #endif
        .match_home = match_home0,
        .uuid_from_super = uuid_from_super0,