Message ID | 20230915184130.403366-18-den@openvz.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | implement discard operation for Parallels images | expand |
On 9/15/23 20:41, Denis V. Lunev wrote: > We should extend the bitmap ff the file is extended and set the bit in Typo: ff -> if. > 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> > --- > block/parallels.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/block/parallels.c b/block/parallels.c > index a2ba5a9353..a6d2f05863 100644 > --- a/block/parallels.c > +++ b/block/parallels.c > @@ -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; Otherwise the typo, LGTM. Reviewed-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
diff --git a/block/parallels.c b/block/parallels.c index a2ba5a9353..a6d2f05863 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -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;
We should extend the bitmap ff 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> --- block/parallels.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)