From ff54de6e47163944185f231700e72d3122b58f4c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 18 Sep 2008 16:11:40 +1000 Subject: [PATCH] Report uuid in --detail --brief for ddf and intel The uuid is slightly fictitious but needed for array matching. --- Assemble.c | 2 +- Detail.c | 8 +++++--- Incremental.c | 4 ++-- mdadm.h | 2 +- super-ddf.c | 23 +++++++++++++---------- super-intel.c | 17 +++++++++++++++-- util.c | 8 +++----- 7 files changed, 40 insertions(+), 24 deletions(-) diff --git a/Assemble.c b/Assemble.c index 3d29d41..a73e101 100644 --- a/Assemble.c +++ b/Assemble.c @@ -401,7 +401,7 @@ int Assemble(struct supertype *st, char *mddev, int mdfd, } st->ss->getinfo_super(st, &info); if (uuid_for_name) - c = fname_from_uuid(st, &info, nbuf); + c = fname_from_uuid(st, &info, nbuf, '-'); else { c = strchr(info.name, ':'); if (c) c++; else c= info.name; diff --git a/Detail.c b/Detail.c index dfe10c2..ae00bb4 100644 --- a/Detail.c +++ b/Detail.c @@ -128,7 +128,8 @@ int Detail(char *dev, int brief, int export, int test, char *homehost) continue; if ((dv=map_dev(disk.major, disk.minor, 1))) { if ((!st || !st->sb) && - (disk.state & (1<=0 && st && st->ss->load_super(st, fd2, NULL) == 0) { st->ss->getinfo_super(st, &info); - if (info.array.ctime != array.ctime || - info.array.level != array.level) + if (array.raid_disks != 0 && /* container */ + (info.array.ctime != array.ctime || + info.array.level != array.level)) st->ss->free_super(st); } if (fd2 >= 0) close(fd2); diff --git a/Incremental.c b/Incremental.c index 869ae83..6474e79 100644 --- a/Incremental.c +++ b/Incremental.c @@ -233,7 +233,7 @@ int Incremental(char *devname, int verbose, int runstop, mp = map_by_uuid(&map, info.uuid); if (uuid_for_name && ! mp) { - name_to_use = fname_from_uuid(st, &info, nbuf); + name_to_use = fname_from_uuid(st, &info, nbuf, '-'); if (verbose >= 0) fprintf(stderr, Name ": not found in mdadm.conf and not identified by homehost" @@ -804,7 +804,7 @@ int Incremental_container(struct supertype *st, char *devname, int verbose, ! *name_to_use || (*devname != '/' || strncmp("UUID-", strrchr(devname,'/')+1,5) == 0) ) - name_to_use = fname_from_uuid(st, ra, nbuf); + name_to_use = fname_from_uuid(st, ra, nbuf, '-'); if (mp) devnum = mp->devnum; diff --git a/mdadm.h b/mdadm.h index f70e361..f327020 100644 --- a/mdadm.h +++ b/mdadm.h @@ -764,7 +764,7 @@ extern void uuid_from_super(int uuid[4], mdp_super_t *super); extern int same_uuid(int a[4], int b[4], int swapuuid); extern void copy_uuid(void *a, int b[4], int swapuuid); extern char *fname_from_uuid(struct supertype *st, - struct mdinfo *info, char *buf); + struct mdinfo *info, char *buf, char sep); extern unsigned long calc_csum(void *super, int bytes); extern int enough(int level, int raid_disks, int layout, int clean, char *avail, int avail_disks); diff --git a/super-ddf.c b/super-ddf.c index 77ce46f..ad21e74 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -1100,20 +1100,18 @@ static void examine_super_ddf(struct supertype *st, char *homehost) examine_pds(sb); } +static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info); + + static void brief_examine_super_ddf(struct supertype *st) { /* We just write a generic DDF ARRAY entry - * The uuid is all hex, 6 groups of 4 bytes */ - struct ddf_super *ddf = st->sb; - int i; - printf("ARRAY /dev/ddf metadata=ddf UUID="); - for (i = 0; i < DDF_GUID_LEN; i++) { - if ((i&3) == 0 && i != 0) - printf(":"); - printf("%02X", 255&ddf->anchor.guid[i]); - } - printf("\n"); + struct mdinfo info; + char nbuf[64]; + getinfo_super_ddf(st, &info); + fname_from_uuid(st, &info, nbuf, ':'); + printf("ARRAY /dev/ddf metadata=ddf UUID=%s\n", nbuf + 5); } static void detail_super_ddf(struct supertype *st, char *homehost) @@ -1132,6 +1130,11 @@ static void brief_detail_super_ddf(struct supertype *st) * Can that be stored in ddf_super?? */ // struct ddf_super *ddf = st->sb; + struct mdinfo info; + char nbuf[64]; + getinfo_super_ddf(st, &info); + fname_from_uuid(st, &info, nbuf,':'); + printf(" UUID=%s", nbuf + 5); } #endif diff --git a/super-intel.c b/super-intel.c index 4571b86..3249b2c 100644 --- a/super-intel.c +++ b/super-intel.c @@ -560,9 +560,18 @@ static void examine_super_imsm(struct supertype *st, char *homehost) } } +static void getinfo_super_imsm(struct supertype *st, struct mdinfo *info); + static void brief_examine_super_imsm(struct supertype *st) { - printf("ARRAY /dev/imsm metadata=imsm\n"); + /* We just write a generic DDF ARRAY entry + */ + struct mdinfo info; + char nbuf[64]; + + getinfo_super_imsm(st, &info); + fname_from_uuid(st, &info, nbuf,'-'); + printf("ARRAY /dev/imsm metadata=imsm UUID=%s\n", nbuf + 5); } static void detail_super_imsm(struct supertype *st, char *homehost) @@ -572,7 +581,11 @@ static void detail_super_imsm(struct supertype *st, char *homehost) static void brief_detail_super_imsm(struct supertype *st) { - printf("%s\n", __FUNCTION__); + struct mdinfo info; + char nbuf[64]; + getinfo_super_imsm(st, &info); + fname_from_uuid(st, &info, nbuf,'-'); + printf(" UUID=%s", nbuf + 5); } #endif diff --git a/util.c b/util.c index b65d2ad..653796f 100644 --- a/util.c +++ b/util.c @@ -269,7 +269,7 @@ void copy_uuid(void *a, int b[4], int swapuuid) memcpy(a, b, 16); } -char *fname_from_uuid(struct supertype *st, struct mdinfo *info, char *buf) +char *fname_from_uuid(struct supertype *st, struct mdinfo *info, char *buf, char sep) { int i; char uuid[16]; @@ -278,10 +278,8 @@ char *fname_from_uuid(struct supertype *st, struct mdinfo *info, char *buf) c += strlen(c); copy_uuid(uuid, info->uuid, st->ss->swapuuid); for (i=0; i<16; i++) { - if (i && (i&3)==0) { - strcpy(c, "-"); - c++; - } + if (i && (i&3)==0) + *c++ = sep; sprintf(c,"%02x", (unsigned char)uuid[i]); c+= 2; }