imsm: update mpb_size in write_super_imsm
With dev->vol.map and mpb->disk entries entering and leaving the parameter block write_super_imsm needs to update the size before writeback. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
272906ef49
commit
a48ac0a8d6
|
@ -1611,6 +1611,7 @@ static int write_super_imsm(struct intel_super *super, int doclose)
|
||||||
int spares = 0;
|
int spares = 0;
|
||||||
int raid_disks = 0;
|
int raid_disks = 0;
|
||||||
int i;
|
int i;
|
||||||
|
__u32 mpb_size = sizeof(struct imsm_super) - sizeof(struct imsm_disk);
|
||||||
|
|
||||||
/* 'generation' is incremented everytime the metadata is written */
|
/* 'generation' is incremented everytime the metadata is written */
|
||||||
generation = __le32_to_cpu(mpb->generation_num);
|
generation = __le32_to_cpu(mpb->generation_num);
|
||||||
|
@ -1623,6 +1624,7 @@ static int write_super_imsm(struct intel_super *super, int doclose)
|
||||||
else {
|
else {
|
||||||
raid_disks++;
|
raid_disks++;
|
||||||
mpb->disk[d->index] = d->disk;
|
mpb->disk[d->index] = d->disk;
|
||||||
|
mpb_size += sizeof(struct imsm_disk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (raid_disks != mpb->num_disks) {
|
if (raid_disks != mpb->num_disks) {
|
||||||
|
@ -1635,7 +1637,10 @@ static int write_super_imsm(struct intel_super *super, int doclose)
|
||||||
struct imsm_dev *dev = __get_imsm_dev(mpb, i);
|
struct imsm_dev *dev = __get_imsm_dev(mpb, i);
|
||||||
|
|
||||||
imsm_copy_dev(dev, super->dev_tbl[i]);
|
imsm_copy_dev(dev, super->dev_tbl[i]);
|
||||||
|
mpb_size += sizeof_imsm_dev(dev, 0);
|
||||||
}
|
}
|
||||||
|
mpb_size += __le32_to_cpu(mpb->bbm_log_size);
|
||||||
|
mpb->mpb_size = __cpu_to_le32(mpb_size);
|
||||||
|
|
||||||
/* recalculate checksum */
|
/* recalculate checksum */
|
||||||
sum = __gen_imsm_checksum(mpb);
|
sum = __gen_imsm_checksum(mpb);
|
||||||
|
|
Loading…
Reference in New Issue