[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 19/22] parallels: Remove unnecessary data_end field
From: |
Alexander Ivanov |
Subject: |
[PATCH v5 19/22] parallels: Remove unnecessary data_end field |
Date: |
Mon, 11 Mar 2024 19:18:47 +0100 |
Since we have used bitmap, field data_end in BDRVParallelsState is
redundant and can be removed.
Add parallels_data_end() helper and remove data_end handling.
Note: bdrv_pwrite_zeroes() was removed from the branch where we reallocate
clusters. It's redundant - bdrv_pwrite_zeroes() was already called for all
such clusters.
Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
---
block/parallels.c | 45 +++++++++++++--------------------------------
block/parallels.h | 1 -
2 files changed, 13 insertions(+), 33 deletions(-)
diff --git a/block/parallels.c b/block/parallels.c
index fd80179642..11b6f97454 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -268,6 +268,13 @@ static void parallels_free_used_bitmap(BlockDriverState
*bs)
s->used_bmap = NULL;
}
+static int64_t parallels_data_end(BDRVParallelsState *s)
+{
+ int64_t data_end = s->data_start * BDRV_SECTOR_SIZE;
+ data_end += s->used_bmap_size * s->cluster_size;
+ return data_end;
+}
+
int64_t GRAPH_RDLOCK parallels_allocate_host_clusters(BlockDriverState *bs,
int64_t *clusters)
{
@@ -279,7 +286,7 @@ int64_t GRAPH_RDLOCK
parallels_allocate_host_clusters(BlockDriverState *bs,
first_free = find_first_zero_bit(s->used_bmap, s->used_bmap_size);
if (first_free == s->used_bmap_size) {
- host_off = s->data_end * BDRV_SECTOR_SIZE;
+ host_off = parallels_data_end(s);
prealloc_clusters = *clusters + s->prealloc_size / s->tracks;
bytes = *clusters * s->cluster_size;
prealloc_bytes = prealloc_clusters * s->cluster_size;
@@ -307,31 +314,14 @@ int64_t GRAPH_RDLOCK
parallels_allocate_host_clusters(BlockDriverState *bs,
s->used_bmap = bitmap_zero_extend(s->used_bmap, s->used_bmap_size,
new_usedsize);
s->used_bmap_size = new_usedsize;
- if (host_off + bytes > s->data_end * BDRV_SECTOR_SIZE) {
- s->data_end = (host_off + bytes) / BDRV_SECTOR_SIZE;
- }
} else {
next_used = find_next_bit(s->used_bmap, s->used_bmap_size, first_free);
/* Not enough continuous clusters in the middle, adjust the size */
*clusters = MIN(*clusters, next_used - first_free);
- bytes = *clusters * s->cluster_size;
host_off = s->data_start * BDRV_SECTOR_SIZE;
host_off += first_free * s->cluster_size;
-
- /*
- * No need to preallocate if we are using tail area from the above
- * branch. In the other case we are likely re-using hole. Preallocate
- * the space if required by the prealloc_mode.
- */
- if (s->prealloc_mode == PRL_PREALLOC_MODE_FALLOCATE &&
- host_off < s->data_end * BDRV_SECTOR_SIZE) {
- ret = bdrv_pwrite_zeroes(bs->file, host_off, bytes, 0);
- if (ret < 0) {
- return ret;
- }
- }
}
ret = parallels_mark_used(bs, s->used_bmap, s->used_bmap_size,
@@ -763,13 +753,7 @@ parallels_check_outside_image(BlockDriverState *bs,
BdrvCheckResult *res,
}
}
- if (high_off == 0) {
- res->image_end_offset = s->data_end << BDRV_SECTOR_BITS;
- } else {
- res->image_end_offset = high_off + s->cluster_size;
- s->data_end = res->image_end_offset >> BDRV_SECTOR_BITS;
- }
-
+ res->image_end_offset = parallels_data_end(s);
return 0;
}
@@ -808,8 +792,6 @@ parallels_check_unused_clusters(BlockDriverState *bs, bool
truncate)
return ret;
}
- s->data_end = end_off / BDRV_SECTOR_SIZE;
-
return leak;
}
@@ -1401,8 +1383,7 @@ static int parallels_open(BlockDriverState *bs, QDict
*options, int flags,
}
s->data_start = data_start;
- s->data_end = s->data_start;
- if (s->data_end < (s->header_size >> BDRV_SECTOR_BITS)) {
+ if (s->data_start < (s->header_size >> BDRV_SECTOR_BITS)) {
/*
* There is not enough unused space to fit to block align between BAT
* and actual data. We can't avoid read-modify-write...
@@ -1435,11 +1416,11 @@ static int parallels_open(BlockDriverState *bs, QDict
*options, int flags,
for (i = 0; i < s->bat_size; i++) {
sector = bat2sect(s, i);
- if (sector + s->tracks > s->data_end) {
- s->data_end = sector + s->tracks;
+ if (sector + s->tracks > file_nb_sectors) {
+ need_check = true;
+ break;
}
}
- need_check = need_check || s->data_end > file_nb_sectors;
ret = parallels_fill_used_bitmap(bs);
if (ret == -ENOMEM) {
diff --git a/block/parallels.h b/block/parallels.h
index d1e46dcfa8..1d41a59b6f 100644
--- a/block/parallels.h
+++ b/block/parallels.h
@@ -79,7 +79,6 @@ typedef struct BDRVParallelsState {
unsigned int bat_size;
int64_t data_start;
- int64_t data_end;
uint64_t prealloc_size;
ParallelsPreallocMode prealloc_mode;
--
2.40.1
- [PATCH v5 05/22] parallels: Add parallels_mark_unused() helper, (continued)
- [PATCH v5 05/22] parallels: Add parallels_mark_unused() helper, Alexander Ivanov, 2024/03/11
- [PATCH v5 03/22] parallels: Make mark_used() a global function, Alexander Ivanov, 2024/03/11
- [PATCH v5 07/22] parallels: Set data_end value in parallels_check_leak(), Alexander Ivanov, 2024/03/11
- [PATCH v5 14/22] parallels: Preserve extensions cluster for non-transient extensions, Alexander Ivanov, 2024/03/11
- [PATCH v5 15/22] parallels: Handle L1 entries equal to one, Alexander Ivanov, 2024/03/11
- [PATCH v5 16/22] parallels: Make a loaded dirty bitmap persistent, Alexander Ivanov, 2024/03/11
- [PATCH v5 12/22] parallels: drop dirty bitmap data if the image was not properly closed, Alexander Ivanov, 2024/03/11
- [PATCH v5 08/22] parallels: Recreate used bitmap in parallels_check_leak(), Alexander Ivanov, 2024/03/11
- [PATCH v5 06/22] parallels: Move host clusters allocation to a separate function, Alexander Ivanov, 2024/03/11
- [PATCH v5 18/22] parallels: Check unused clusters in parallels_check_leak(), Alexander Ivanov, 2024/03/11
- [PATCH v5 19/22] parallels: Remove unnecessary data_end field,
Alexander Ivanov <=
- [PATCH v5 13/22] parallels: Let image extensions work in RW mode, Alexander Ivanov, 2024/03/11
- [PATCH v5 10/22] parallels: Create used bitmap even if checks needed, Alexander Ivanov, 2024/03/11
- [PATCH v5 20/22] tests: Add parallels images support to test 165, Alexander Ivanov, 2024/03/11
- [PATCH v5 17/22] parallels: Reverse a conditional in parallels_check_leak() to reduce indents, Alexander Ivanov, 2024/03/11
- [PATCH v5 09/22] parallels: Add a note about used bitmap in parallels_check_duplicate(), Alexander Ivanov, 2024/03/11
- [PATCH v5 04/22] parallels: Limit search in parallels_mark_used to the last marked claster, Alexander Ivanov, 2024/03/11
- [PATCH v5 21/22] tests: Turned on 256, 299, 304 and block-status-cache for parallels format, Alexander Ivanov, 2024/03/11
- [PATCH v5 11/22] parallels: Add dirty bitmaps saving, Alexander Ivanov, 2024/03/11
- [PATCH v5 22/22] tests: Add parallels format support to image-fleecing, Alexander Ivanov, 2024/03/11