The uuid is slightly fictitious but needed for array matching.
}
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;
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
*/
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);
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"
! *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;
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);
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)
* 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
}
}
+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)
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
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];
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;
}