*/
#define NULL_CONF_SZ 4096
+static unsigned int get_pd_index_from_refnum(const struct vcl *vc,
+ __u32 refnum, unsigned int nmax,
+ const struct vd_config **bvd,
+ unsigned int *idx);
+
static int __write_ddf_structure(struct dl *d, struct ddf_super *ddf, __u8 type,
char *null_aligned)
{
n_config = ddf->max_part;
conf_size = ddf->conf_rec_len * 512;
for (i = 0 ; i <= n_config ; i++) {
- struct vcl *c = d->vlist[i];
- if (i == n_config)
+ struct vcl *c;
+ struct vd_config *vdc = NULL;
+ if (i == n_config) {
c = (struct vcl *)d->spare;
-
+ if (c)
+ vdc = &c->conf;
+ } else {
+ unsigned int dummy;
+ c = d->vlist[i];
+ if (c)
+ get_pd_index_from_refnum(
+ c, d->disk.refnum,
+ ddf->mppe,
+ (const struct vd_config **)&vdc,
+ &dummy);
+ }
if (c) {
- c->conf.seqnum = ddf->primary.seq;
- c->conf.crc = calc_crc(&c->conf, conf_size);
- if (write(fd, &c->conf, conf_size) < 0)
+ vdc->seqnum = ddf->primary.seq;
+ vdc->crc = calc_crc(vdc, conf_size);
+ if (write(fd, vdc, conf_size) < 0)
break;
} else {
unsigned int togo = conf_size;
for (i = 0; i < conf->sec_elmnt_count-1; i++) {
const struct vd_config *bvd = vc->other_bvds[i];
if (bvd == NULL) {
- pr_err("BVD %d is missing", i+1);
+ pr_err("BVD %d is missing\n", i+1);
return -1;
}
if (bvd->srl != conf->srl) {