Set 'metadata_version' for container_member in Incremental_container

From: Dan Williams <dan.j.williams@intel.com>

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
Dan Williams 2008-05-15 16:48:25 +10:00 committed by Neil Brown
parent f352c54527
commit 5f2aace8eb
3 changed files with 25 additions and 0 deletions

View File

@ -717,6 +717,19 @@ int IncrementalScan(int verbose)
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)
{
@ -726,6 +739,12 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
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;
@ -736,6 +755,7 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
int usepart = 1;
char *n;
int working = 0;
char ver[100];
if ((autof&7) == 3 || (autof&7) == 5)
usepart = 0;
@ -769,6 +789,9 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
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];

View File

@ -152,6 +152,7 @@ struct mdinfo {
int cache_size; /* size of raid456 stripe cache*/
int mismatch_cnt;
char text_version[50];
int container_member; /* for assembling external-metatdata arrays */
char sys_name[20];
struct mdinfo *devs;

View File

@ -2354,6 +2354,7 @@ static struct mdinfo *container_content_ddf(struct supertype *st)
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++) {