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