mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
parallels: update used bitmap in allocate_cluster
We should extend the bitmap if the file is extended and set the bit in the image used bitmap once the cluster is allocated. Sanity check at that moment also looks like a good idea. Signed-off-by: Denis V. Lunev <den@openvz.org> Reviewed-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
This commit is contained in:
parent
73194d3f54
commit
eeb1e6dc49
1 changed files with 14 additions and 0 deletions
|
@ -282,6 +282,8 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
|
|||
return len;
|
||||
}
|
||||
if (s->data_end + space > (len >> BDRV_SECTOR_BITS)) {
|
||||
uint32_t new_usedsize;
|
||||
|
||||
space += s->prealloc_size;
|
||||
/*
|
||||
* We require the expanded size to read back as zero. If the
|
||||
|
@ -305,6 +307,12 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
|
|||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
new_usedsize = s->used_bmap_size +
|
||||
(space << BDRV_SECTOR_BITS) / s->cluster_size;
|
||||
s->used_bmap = bitmap_zero_extend(s->used_bmap, s->used_bmap_size,
|
||||
new_usedsize);
|
||||
s->used_bmap_size = new_usedsize;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -336,6 +344,12 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
|
|||
}
|
||||
}
|
||||
|
||||
ret = mark_used(bs, s->used_bmap, s->used_bmap_size,
|
||||
s->data_end << BDRV_SECTOR_BITS, to_allocate);
|
||||
if (ret < 0) {
|
||||
/* Image consistency is broken. Alarm! */
|
||||
return ret;
|
||||
}
|
||||
for (i = 0; i < to_allocate; i++) {
|
||||
parallels_set_bat_entry(s, idx + i, s->data_end / s->off_multiplier);
|
||||
s->data_end += s->tracks;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue