[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 14/18] qcow2: Switch qcow2_measure() to byte-base
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v6 14/18] qcow2: Switch qcow2_measure() to byte-based iteration |
Date: |
Wed, 30 Aug 2017 16:05:38 -0500 |
This is new code, but it is easier to read if it makes passes over
the image using bytes rather than sectors (and will get easier in
the future when bdrv_get_block_status is converted to byte-based).
Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: John Snow <address@hidden>
---
v6: separate bug fix to earlier patch
v5: new patch
---
block/qcow2.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 40ba26c111..57e3c5e7d5 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3666,20 +3666,19 @@ static BlockMeasureInfo *qcow2_measure(QemuOpts *opts,
BlockDriverState *in_bs,
*/
required = virtual_size;
} else {
- int cluster_sectors = cluster_size / BDRV_SECTOR_SIZE;
- int64_t sector_num;
+ int64_t offset;
int pnum = 0;
- for (sector_num = 0;
- sector_num < ssize / BDRV_SECTOR_SIZE;
- sector_num += pnum) {
- int nb_sectors = MIN(ssize / BDRV_SECTOR_SIZE - sector_num,
- BDRV_REQUEST_MAX_SECTORS);
+ for (offset = 0; offset < ssize;
+ offset += pnum * BDRV_SECTOR_SIZE) {
+ int nb_sectors = MIN(ssize - offset,
+ INT_MAX) / BDRV_SECTOR_SIZE;
BlockDriverState *file;
int64_t ret;
ret = bdrv_get_block_status_above(in_bs, NULL,
- sector_num, nb_sectors,
+ offset >> BDRV_SECTOR_BITS,
+ nb_sectors,
&pnum, &file);
if (ret < 0) {
error_setg_errno(&local_err, -ret,
@@ -3692,12 +3691,11 @@ static BlockMeasureInfo *qcow2_measure(QemuOpts *opts,
BlockDriverState *in_bs,
} else if ((ret & (BDRV_BLOCK_DATA | BDRV_BLOCK_ALLOCATED)) ==
(BDRV_BLOCK_DATA | BDRV_BLOCK_ALLOCATED)) {
/* Extend pnum to end of cluster for next iteration */
- pnum = ROUND_UP(sector_num + pnum, cluster_sectors) -
- sector_num;
+ pnum = (ROUND_UP(offset + pnum * BDRV_SECTOR_SIZE,
+ cluster_size) - offset) >> BDRV_SECTOR_BITS;
/* Count clusters we've seen */
- required += (sector_num % cluster_sectors + pnum) *
- BDRV_SECTOR_SIZE;
+ required += offset % cluster_size + pnum *
BDRV_SECTOR_SIZE;
}
}
}
--
2.13.5
- [Qemu-devel] [PATCH v6 02/18] hbitmap: Rename serialization_granularity to serialization_align, (continued)
- [Qemu-devel] [PATCH v6 02/18] hbitmap: Rename serialization_granularity to serialization_align, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 04/18] dirty-bitmap: Drop unused functions, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 06/18] dirty-bitmap: Change bdrv_dirty_bitmap_*serialize*() to take bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 05/18] dirty-bitmap: Change bdrv_dirty_bitmap_size() to report bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 07/18] qcow2: Switch sectors_covered_by_bitmap_cluster() to byte-based, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 09/18] dirty-bitmap: Change bdrv_dirty_iter_next() to report byte offset, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 08/18] dirty-bitmap: Set iterator start by offset, not sector, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 10/18] dirty-bitmap: Change bdrv_get_dirty_count() to report bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 11/18] dirty-bitmap: Change bdrv_get_dirty_locked() to take bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 12/18] dirty-bitmap: Change bdrv_[re]set_dirty_bitmap() to use bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 14/18] qcow2: Switch qcow2_measure() to byte-based iteration,
Eric Blake <=
- [Qemu-devel] [PATCH v6 13/18] mirror: Switch mirror_dirty_init() to byte-based iteration, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 15/18] qcow2: Switch load_bitmap_data() to byte-based iteration, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 16/18] qcow2: Switch store_bitmap_data() to byte-based iteration, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 17/18] dirty-bitmap: Switch bdrv_set_dirty() to bytes, Eric Blake, 2017/08/30
- [Qemu-devel] [PATCH v6 18/18] dirty-bitmap: Convert internal hbitmap size/granularity, Eric Blake, 2017/08/30
- Re: [Qemu-devel] [PATCH v6 00/18] make dirty-bitmap byte-based, John Snow, 2017/08/30