[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 04/22] parallels: invent parallels_opts_prealloc() helper to parse prealloc opts, (continued)
- [PATCH 04/22] parallels: invent parallels_opts_prealloc() helper to parse prealloc opts, 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 3/3] tests: extend test 131 to cover availability of the write-zeroes, Denis V. Lunev, 2023/09/18
- [PATCH 01/22] parallels: fix formatting in bdrv_parallels initialization, Denis V. Lunev, 2023/09/18
- [PATCH 18/22] parallels: improve readability of allocate_clusters, 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 15/22] parallels: accept multiple clusters in mark_used(), Denis V. Lunev, 2023/09/18
- [PATCH 21/22] parallels: naive implementation of parallels_co_pwrite_zeroes, 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 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 11/22] parallels: add test which will validate data_off fixes through repair, 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