summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-09-18 16:11:40 +1000
committerNeilBrown <neilb@suse.de>2008-09-18 16:11:40 +1000
commitff54de6e47163944185f231700e72d3122b58f4c (patch)
tree6d9f2763f38f976811adc9c66d44d1fbe7df03b9
parentd7288ddc3a06a0912f5f0a3f23ccca76a66ff332 (diff)
downloadmdadm-ff54de6e47163944185f231700e72d3122b58f4c.tar.gz
mdadm-ff54de6e47163944185f231700e72d3122b58f4c.tar.xz
mdadm-ff54de6e47163944185f231700e72d3122b58f4c.zip
Report uuid in --detail --brief for ddf and intel
The uuid is slightly fictitious but needed for array matching.
-rw-r--r--Assemble.c2
-rw-r--r--Detail.c8
-rw-r--r--Incremental.c4
-rw-r--r--mdadm.h2
-rw-r--r--super-ddf.c23
-rw-r--r--super-intel.c17
-rw-r--r--util.c8
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<<MD_DISK_ACTIVE))) {
+ (array.raid_disks == 0 ||
+ (disk.state & (1<<MD_DISK_ACTIVE)))) {
/* try to read the superblock from this device
* to get more info
*/
@@ -136,8 +137,9 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
if (fd2 >=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;
}