[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 17/54] qcow2: Switch qcow2_measure() to byte-based it
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 17/54] qcow2: Switch qcow2_measure() to byte-based iteration |
Date: |
Fri, 6 Oct 2017 17:53:45 +0200 |
From: Eric Blake <address@hidden>
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>
Reviewed-by: Kevin Wolf <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/qcow2.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 970006fc1d..b8da8ca105 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3673,20 +3673,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,
+ BDRV_REQUEST_MAX_BYTES) /
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,
@@ -3699,12 +3698,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.6
- [Qemu-devel] [PULL 05/54] dirty-bitmap: Drop unused functions, (continued)
- [Qemu-devel] [PULL 05/54] dirty-bitmap: Drop unused functions, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 06/54] dirty-bitmap: Avoid size query failure during truncate, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 07/54] dirty-bitmap: Change bdrv_dirty_bitmap_size() to report bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 08/54] dirty-bitmap: Track bitmap size by bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 10/54] qcow2: Switch sectors_covered_by_bitmap_cluster() to byte-based, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 09/54] dirty-bitmap: Change bdrv_dirty_bitmap_*serialize*() to take bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 11/54] dirty-bitmap: Set iterator start by offset, not sector, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 12/54] dirty-bitmap: Change bdrv_dirty_iter_next() to report byte offset, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 14/54] dirty-bitmap: Change bdrv_get_dirty_locked() to take bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 13/54] dirty-bitmap: Change bdrv_get_dirty_count() to report bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 17/54] qcow2: Switch qcow2_measure() to byte-based iteration,
Kevin Wolf <=
- [Qemu-devel] [PULL 16/54] mirror: Switch mirror_dirty_init() to byte-based iteration, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 15/54] dirty-bitmap: Change bdrv_[re]set_dirty_bitmap() to use bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 19/54] qcow2: Switch store_bitmap_data() to byte-based iteration, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 18/54] qcow2: Switch load_bitmap_data() to byte-based iteration, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 22/54] hw/block/onenand: Remove dead code block, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 21/54] dirty-bitmap: Convert internal hbitmap size/granularity, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 20/54] dirty-bitmap: Switch bdrv_set_dirty() to bytes, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 23/54] qemu-iotests: remove dead code, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 24/54] qemu-iotests: get rid of AWK_PROG, Kevin Wolf, 2017/10/06
- [Qemu-devel] [PULL 25/54] qemu-iotests: move "check" code out of common.rc, Kevin Wolf, 2017/10/06