]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
DDF: report member arrays in examine_brief.
authorNeilBrown <neilb@suse.de>
Tue, 4 Nov 2008 09:51:12 +0000 (20:51 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 4 Nov 2008 09:51:12 +0000 (20:51 +1100)
Thus an auto-generated config file will list all the arrays.

Signed-off-by: NeilBrown <neilb@suse.de>
Create.c
super-ddf.c

index 7492c67efaff3724bbc58792d9941ed4e8636001..13301e9b21e0672d7b3a54442c2e0beb7ed59ceb 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -313,7 +313,7 @@ int Create(struct supertype *st, char *mddev,
                }
 
                if (size && freesize < size) {
-                       fprintf(stderr, Name ": %s is smaller that given size."
+                       fprintf(stderr, Name ": %s is smaller than given size."
                                " %lluK < %lluK + metadata\n",
                                dname, freesize, size);
                        fail = 1;
index 1caaf0113a26ea3362036487db62663b4642bfb5..98a5485adbd58719ceb674358c4e5572e71c37ac 100644 (file)
@@ -970,6 +970,15 @@ static int map_num1(struct num_mapping *map, int num)
        return map[i].num2;
 }
 
+static int all_ff(char *guid)
+{
+       int i;
+       for (i = 0; i < DDF_GUID_LEN; i++)
+               if (guid[i] != (char)0xff)
+                       return 0;
+       return 1;
+}
+
 #ifndef MDASSEMBLE
 static void print_guid(char *guid, int tstamp)
 {
@@ -1128,16 +1137,33 @@ static void examine_super_ddf(struct supertype *st, char *homehost)
 
 static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info);
 
+static void uuid_from_super_ddf(struct supertype *st, int uuid[4]);
 
 static void brief_examine_super_ddf(struct supertype *st)
 {
        /* We just write a generic DDF ARRAY entry
         */
+       struct ddf_super *ddf = st->sb;
        struct mdinfo info;
+       int i;
        char nbuf[64];
        getinfo_super_ddf(st, &info);
        fname_from_uuid(st, &info, nbuf, ':');
        printf("ARRAY metadata=ddf UUID=%s\n", nbuf + 5);
+
+       for (i=0; i<__be16_to_cpu(ddf->virt->max_vdes); i++) {
+               struct virtual_entry *ve = &ddf->virt->entries[i];
+               struct vcl vcl;
+               char nbuf1[64];
+               if (all_ff(ve->guid))
+                       continue;
+               memcpy(vcl.conf.guid, ve->guid, DDF_GUID_LEN);
+               ddf->currentconf =&vcl;
+               uuid_from_super_ddf(st, info.uuid);
+               fname_from_uuid(st, &info, nbuf1, ':');
+               printf("ARRAY container=%s member=%d UUID=%s\n",
+                      nbuf+5, i, nbuf1+5);
+       }
 }
 
 static void detail_super_ddf(struct supertype *st, char *homehost)
@@ -1237,8 +1263,6 @@ static void uuid_from_super_ddf(struct supertype *st, int uuid[4])
 
        sha1_init_ctx(&ctx);
        sha1_process_bytes(guid, DDF_GUID_LEN, &ctx);
-       if (vcl && vcl->conf.sec_elmnt_count > 1)
-               sha1_process_bytes(&vcl->conf.sec_elmnt_seq, 1, &ctx);
        sha1_finish_ctx(&ctx, buf);
        memcpy(uuid, buf, 4*4);
 }
@@ -1668,14 +1692,6 @@ static int init_super_ddf(struct supertype *st,
        return 1;
 }
 
-static int all_ff(char *guid)
-{
-       int i;
-       for (i = 0; i < DDF_GUID_LEN; i++)
-               if (guid[i] != (char)0xff)
-                       return 0;
-       return 1;
-}
 static int chunk_to_shift(int chunksize)
 {
        return ffs(chunksize/512)-1;