return rv;
}
+static char *container2devname(char *devname)
+{
+ int fd = open(devname, O_RDONLY);
+ char *mdname = NULL;
+
+ if (fd > 0) {
+ mdname = devnum2devname(fd2devnum(fd));
+ close(fd);
+ }
+
+ return mdname;
+}
+
int Incremental_container(struct supertype *st, char *devname, int verbose,
int runstop, int autof)
{
struct mdinfo *list = st->ss->container_content(st);
struct mdinfo *ra;
+ char *mdname = container2devname(devname);
+
+ if (!mdname) {
+ fprintf(stderr, Name": failed to determine device name\n");
+ return 2;
+ }
for (ra = list ; ra ; ra = ra->next) {
struct mdinfo *sra;
int usepart = 1;
char *n;
int working = 0;
+ char ver[100];
if ((autof&7) == 3 || (autof&7) == 5)
usepart = 0;
sra = sysfs_read(mdfd, 0, 0);
+ sprintf(ver, "external:/%s/%d", mdname, ra->container_member);
+ sysfs_set_str(sra, NULL, "metadata_version", ver);
+
sysfs_set_array(sra, ra);
for (dev = ra->devs; dev; dev = dev->next) {
char buf[20];
memset(this->uuid, 0, sizeof(this->uuid));
this->component_size = __be64_to_cpu(vc->conf.blocks);
this->array.size = this->component_size / 2;
+ this->container_member = i;
mppe = __be16_to_cpu(ddf->anchor.max_primary_element_entries);
for (i=0 ; i < mppe ; i++) {