diff options
author | Neil Brown <neilb@suse.de> | 2008-05-27 09:18:56 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2008-05-27 09:18:56 +1000 |
commit | dd15dc4a4d56d0b9ed29b558fb86a8945a18bc5c (patch) | |
tree | 44e1e6831b36d092ae3676e81694c9db8226eee5 | |
parent | 159c3a1a7785693d21f5226182f9c066882bef66 (diff) | |
download | mdadm-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.c | 12 | ||||
-rw-r--r-- | Incremental.c | 2 | ||||
-rw-r--r-- | mdadm.h | 6 | ||||
-rw-r--r-- | super-ddf.c | 6 |
4 files changed, 12 insertions, 14 deletions
@@ -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); @@ -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, |