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:
parent
159c3a1a77
commit
dd15dc4a4d
12
Create.c
12
Create.c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
6
mdadm.h
6
mdadm.h
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue