DDF: added other_bvd to struct vcl

The VD config structures of different BVDs in the same SVD may be
different. This pointer stores the other BVDs.

Signed-off-by: Martin Wilck <mwilck@arcor.de>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
mwilck@arcor.de 2013-03-01 23:28:25 +01:00 committed by NeilBrown
parent 0175cbf62c
commit 8ec5d68536
1 changed files with 10 additions and 0 deletions

View File

@ -407,6 +407,7 @@ struct ddf_super {
__u64 *lba_offset; /* location in 'conf' of
* the lba table */
unsigned int vcnum; /* index into ->virt */
struct vd_config **other_bvds;
__u64 *block_sizes; /* NULL if all the same */
};
};
@ -743,6 +744,12 @@ static int load_ddf_local(int fd, struct ddf_super *super,
}
vcl->next = super->conflist;
vcl->block_sizes = NULL; /* FIXME not for CONCAT */
if (vd->sec_elmnt_count > 1)
vcl->other_bvds =
xcalloc(vd->sec_elmnt_count - 1,
sizeof(struct vd_config *));
else
vcl->other_bvds = NULL;
super->conflist = vcl;
dl->vlist[vnum++] = vcl;
}
@ -860,6 +867,8 @@ static void free_super_ddf(struct supertype *st)
ddf->conflist = v->next;
if (v->block_sizes)
free(v->block_sizes);
if (v->other_bvds)
free(v->other_bvds);
free(v);
}
while (ddf->dlist) {
@ -2027,6 +2036,7 @@ static int init_super_ddf_bvd(struct supertype *st,
vcl->lba_offset = (__u64*) &vcl->conf.phys_refnum[ddf->mppe];
vcl->vcnum = venum;
vcl->block_sizes = NULL; /* FIXME not for CONCAT */
vcl->other_bvds = NULL;
vc = &vcl->conf;