[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 16/22] parallels: update used bitmap in allocate_cluster
From: |
Denis V. Lunev |
Subject: |
[PULL v2 16/22] parallels: update used bitmap in allocate_cluster |
Date: |
Thu, 21 Sep 2023 09:54:54 +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 3df73aa8a0..ec35237119 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 v2 02/22] parallels: mark driver as supporting CBT, (continued)
- [PULL v2 02/22] parallels: mark driver as supporting CBT, Denis V. Lunev, 2023/09/21
- [PULL v2 07/22] parallels: refactor path when we need to re-check image in parallels_open, Denis V. Lunev, 2023/09/21
- [PULL v2 09/22] tests: ensure that image validation will not cure the corruption, Denis V. Lunev, 2023/09/21
- [PULL v2 08/22] parallels: create mark_used() helper which sets bit in used bitmap, Denis V. Lunev, 2023/09/21
- [PULL v2 05/22] parallels: return earler in fail_format branch in parallels_open(), Denis V. Lunev, 2023/09/21
- [PULL v2 06/22] parallels: return earlier from parallels_open() function on error, Denis V. Lunev, 2023/09/21
- [PULL v2 13/22] tests: fix broken deduplication check in parallels format test, Denis V. Lunev, 2023/09/21
- [PULL v2 10/22] parallels: fix broken parallels_check_data_off(), Denis V. Lunev, 2023/09/21
- [PULL v2 19/22] parallels: naive implementation of parallels_co_pdiscard, Denis V. Lunev, 2023/09/21
- [PULL v2 15/22] parallels: accept multiple clusters in mark_used(), Denis V. Lunev, 2023/09/21
- [PULL v2 16/22] parallels: update used bitmap in allocate_cluster,
Denis V. Lunev <=
- [PULL v2 14/22] tests: test self-cure of parallels image with duplicated clusters, Denis V. Lunev, 2023/09/21
- [PULL v2 12/22] parallels: collect bitmap of used clusters at open, Denis V. Lunev, 2023/09/21
- [PULL v2 21/22] parallels: naive implementation of parallels_co_pwrite_zeroes, Denis V. Lunev, 2023/09/21
- [PULL v2 17/22] parallels: naive implementation of allocate_clusters with used bitmap, Denis V. Lunev, 2023/09/21
- [PULL v2 11/22] parallels: add test which will validate data_off fixes through repair, Denis V. Lunev, 2023/09/21
- [PULL v2 22/22] tests: extend test 131 to cover availability of the write-zeroes, Denis V. Lunev, 2023/09/21
- [PULL v2 18/22] parallels: improve readability of allocate_clusters, Denis V. Lunev, 2023/09/21
- [PULL v2 20/22] tests: extend test 131 to cover availability of the discard operation, Denis V. Lunev, 2023/09/21
- Re: [PULL v2 00/22] implement discard operation for Parallels images, Stefan Hajnoczi, 2023/09/21