printf("%02X", guid[i]&255);
}
- printf(" (");
+ printf("\n (");
while (l && guid[l-1] == ' ')
l--;
for (i=0 ; i<l ; i++) {
}
}
+static void export_examine_super_ddf(struct supertype *st)
+{
+ struct mdinfo info;
+ char nbuf[64];
+ getinfo_super_ddf(st, &info);
+ fname_from_uuid(st, &info, nbuf, ':');
+ printf("MD_METADATA=ddf\n");
+ printf("MD_LEVEL=container\n");
+ printf("MD_UUID=%s\n", nbuf+5);
+}
+
+
static void detail_super_ddf(struct supertype *st, char *homehost)
{
/* FIXME later
info->component_size = ddf->dlist->size - info->data_offset;
} else {
info->disk.number = -1;
+ info->disk.raid_disk = -1;
// info->disk.raid_disk = find refnum in the table and use index;
}
info->disk.state = (1 << MD_DISK_SYNC);
return rv;
}
+__u32 random32(void)
+{
+ __u32 rv;
+ int rfd = open("/dev/urandom", O_RDONLY);
+ if (rfd < 0 || read(rfd, &rv, 4) != 4)
+ rv = random();
+ if (rfd >= 0)
+ close(rfd);
+ return rv;
+}
+
static void make_header_guid(char *guid)
{
__u32 stamp;
- int rfd;
/* Create a DDF Header of Virtual Disk GUID */
/* 24 bytes of fiction required.
memcpy(guid+12, &stamp, 4);
stamp = __cpu_to_be32(time(0) - DECADE);
memcpy(guid+16, &stamp, 4);
- rfd = open("/dev/urandom", O_RDONLY);
- if (rfd < 0 || read(rfd, &stamp, 4) != 4)
- stamp = random();
+ stamp = random32();
memcpy(guid+20, &stamp, 4);
- if (rfd >= 0) close(rfd);
}
static int init_super_ddf_bvd(struct supertype *st,
memset(vc->vendor, 0xff, 32);
memset(vc->phys_refnum, 0xff, 4*ddf->mppe);
- memset(vc->phys_refnum+(ddf->mppe * 4), 0x00, 8*ddf->mppe);
+ memset(vc->phys_refnum+ddf->mppe, 0x00, 8*ddf->mppe);
vcl->next = ddf->conflist;
ddf->conflist = vcl;
tm = localtime(&now);
sprintf(dd->disk.guid, "%8s%04d%02d%02d",
T10, tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
- *(__u32*)(dd->disk.guid + 16) = random();
- *(__u32*)(dd->disk.guid + 20) = random();
+ *(__u32*)(dd->disk.guid + 16) = random32();
+ *(__u32*)(dd->disk.guid + 20) = random32();
do {
/* Cannot be bothered finding a CRC of some irrelevant details*/
- dd->disk.refnum = random();
+ dd->disk.refnum = random32();
for (i = __be16_to_cpu(ddf->active->max_pd_entries) - 1;
i >= 0; i--)
if (ddf->phys->entries[i].refnum == dd->disk.refnum)
if (vc->conf.phys_refnum[i] == 0xFFFFFFFF)
continue;
- this->array.working_disks++;
-
for (d = ddf->dlist; d ; d=d->next)
if (d->disk.refnum == vc->conf.phys_refnum[i])
break;
if (d == NULL)
- break;
+ /* Haven't found that one yet, maybe there are others */
+ continue;
+
+ this->array.working_disks++;
dev = malloc(sizeof(*dev));
memset(dev, 0, sizeof(*dev));
#ifndef MDASSEMBLE
.examine_super = examine_super_ddf,
.brief_examine_super = brief_examine_super_ddf,
+ .export_examine_super = export_examine_super_ddf,
.detail_super = detail_super_ddf,
.brief_detail_super = brief_detail_super_ddf,
.validate_geometry = validate_geometry_ddf,