Discard st->container_member

'container_member' isn't really a well defined concept.
Each metadata might enumerate members differently, so just
let each format /mdX/YYYY as appropriate.
This commit is contained in:
Neil Brown 2008-05-27 09:18:56 +10:00
parent 159c3a1a77
commit dd15dc4a4d
4 changed files with 12 additions and 14 deletions

View File

@ -541,15 +541,11 @@ int Create(struct supertype *st, char *mddev, int mdfd,
if (st->ss->external) {
char ver[100];
if (st->ss->external == 1)
/* container */
strcat(strcpy(ver, "external:"),
info.text_version);
else {
strcat(strcpy(ver, "external:"),
info.text_version);
if (st->ss->external == 2) {
/* member */
sprintf(ver, "external:/%s/%d",
devnum2devname(st->container_dev),
st->container_member);
/* When creating a member, we need to be careful
* to negotiate with mdmon properly.
* If it is already running, we cannot write to

View File

@ -830,7 +830,7 @@ 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);
sprintf(ver, "external:%s", ra->text_version);
sysfs_set_str(sra, NULL, "metadata_version", ver);
sysfs_set_array(sra, ra);

View File

@ -154,7 +154,10 @@ 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 */
int container_member; /* for assembling external-metatdata arrays
* This is to be used internally by metadata
* handler only */
char sys_name[20];
struct mdinfo *devs;
@ -444,7 +447,6 @@ struct supertype {
int minor_version;
int max_devs;
int container_dev; /* devnum of container */
int container_member; /* numerical position in container */
void *sb;
void *info;

View File

@ -405,6 +405,7 @@ struct ddf_super {
* the lba table */
struct vd_config conf;
} *conflist, *newconf;
int conf_num; /* Index into 'virt' of entry matching 'newconf' */
struct dl {
struct dl *next;
struct disk_data disk;
@ -1162,7 +1163,7 @@ static void uuid_from_super_ddf(struct supertype *st, int uuid[4])
* The first 16 bytes of the sha1 of these is used.
*/
struct ddf_super *ddf = st->sb;
struct vd_config *vd = find_vdcr(ddf, st->container_member);
struct vd_config *vd = find_vdcr(ddf, ddf->conf_num);
if (!vd)
memset(uuid, 0, sizeof (uuid));
@ -1688,7 +1689,7 @@ static int init_super_ddf_bvd(struct supertype *st,
return 0;
}
ve = &ddf->virt->entries[venum];
st->container_member = venum;
ddf->conf_num = venum;
/* A Virtual Disk GUID contains the T10 Vendor ID, controller type,
* timestamp, random number
@ -2086,7 +2087,6 @@ int validate_geometry_ddf(struct supertype *st,
if (load_super_ddf_all(st, cfd, (void **)&ddf, NULL, 1) == 0) {
st->sb = ddf;
st->container_dev = fd2devnum(cfd);
st->container_member = 27; // FIXME
close(cfd);
return st->ss->validate_geometry(st, level, layout,
raiddisks, chunk, size,