Skip to content
Snippets Groups Projects
Commit eeb1e6dc authored by Denis V. Lunev's avatar Denis V. Lunev
Browse files

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: default avatarDenis V. Lunev <den@openvz.org>
Reviewed-by: default avatarAlexander Ivanov <alexander.ivanov@virtuozzo.com>
parent 73194d3f
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment