summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-05-27 09:18:56 +1000
committerNeil Brown <neilb@suse.de>2008-05-27 09:18:56 +1000
commitdd15dc4a4d56d0b9ed29b558fb86a8945a18bc5c (patch)
tree44e1e6831b36d092ae3676e81694c9db8226eee5
parent159c3a1a7785693d21f5226182f9c066882bef66 (diff)
downloadmdadm-dd15dc4a4d56d0b9ed29b558fb86a8945a18bc5c.tar.gz
mdadm-dd15dc4a4d56d0b9ed29b558fb86a8945a18bc5c.tar.xz
mdadm-dd15dc4a4d56d0b9ed29b558fb86a8945a18bc5c.zip
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.
-rw-r--r--Create.c12
-rw-r--r--Incremental.c2
-rw-r--r--mdadm.h6
-rw-r--r--super-ddf.c6
4 files changed, 12 insertions, 14 deletions
diff --git a/Create.c b/Create.c
index b7f0914..68a4230 100644
--- a/Create.c
+++ b/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
diff --git a/Incremental.c b/Incremental.c
index 5c582bb..d3f93a6 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -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);
diff --git a/mdadm.h b/mdadm.h
index 73f22ae..f795b4a 100644
--- a/mdadm.h
+++ b/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;
diff --git a/super-ddf.c b/super-ddf.c
index fe76509..e8082b5 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -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,