[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 16/22] parallels: update used bitmap in allocate_cluster
From: |
Denis V. Lunev |
Subject: |
[PULL 16/22] parallels: update used bitmap in allocate_cluster |
Date: |
Wed, 20 Sep 2023 11:21:02 +0200 |
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>
---
block/parallels.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/block/parallels.c b/block/parallels.c
index b6505fcc5b..3beb18e44f 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;
--
2.34.1
- [PULL 09/22] tests: ensure that image validation will not cure the corruption, (continued)
- [PULL 09/22] tests: ensure that image validation will not cure the corruption, Denis V. Lunev, 2023/09/20
- [PULL 07/22] parallels: refactor path when we need to re-check image in parallels_open, Denis V. Lunev, 2023/09/20
- [PULL 11/22] parallels: add test which will validate data_off fixes through repair, Denis V. Lunev, 2023/09/20
- [PULL 19/22] parallels: naive implementation of parallels_co_pdiscard, Denis V. Lunev, 2023/09/20
- [PULL 15/22] parallels: accept multiple clusters in mark_used(), Denis V. Lunev, 2023/09/20
- [PULL 22/22] tests: extend test 131 to cover availability of the write-zeroes, Denis V. Lunev, 2023/09/20
- [PULL 12/22] parallels: collect bitmap of used clusters at open, Denis V. Lunev, 2023/09/20
- [PULL 18/22] parallels: improve readability of allocate_clusters, Denis V. Lunev, 2023/09/20
- [PULL 21/22] parallels: naive implementation of parallels_co_pwrite_zeroes, Denis V. Lunev, 2023/09/20
- [PULL 10/22] parallels: fix broken parallels_check_data_off(), Denis V. Lunev, 2023/09/20
- [PULL 16/22] parallels: update used bitmap in allocate_cluster,
Denis V. Lunev <=
- [PULL 20/22] tests: extend test 131 to cover availability of the discard operation, Denis V. Lunev, 2023/09/20
- [PULL 17/22] parallels: naive implementation of allocate_clusters with used bitmap, Denis V. Lunev, 2023/09/20
- [PULL 13/22] tests: fix broken deduplication check in parallels format test, Denis V. Lunev, 2023/09/20
- [PULL 14/22] tests: test self-cure of parallels image with duplicated clusters, Denis V. Lunev, 2023/09/20
- Re: [PULL 00/22] implement discard operation for Parallels images, Stefan Hajnoczi, 2023/09/20