[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 07/35] block: Switch bdrv_make_zero() to byte-based
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 07/35] block: Switch bdrv_make_zero() to byte-based |
Date: |
Thu, 26 Oct 2017 15:17:13 +0200 |
From: Eric Blake <address@hidden>
We are gradually converting to byte-based interfaces, as they are
easier to reason about than sector-based. Change the internal
loop iteration of zeroing a device to track by bytes instead of
sectors (although we are still guaranteed that we iterate by steps
that are sector-aligned).
Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Reviewed-by: John Snow <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/io.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/block/io.c b/block/io.c
index db8dc59c94..ad84d84888 100644
--- a/block/io.c
+++ b/block/io.c
@@ -716,38 +716,38 @@ int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
*/
int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
{
- int64_t target_sectors, ret, nb_sectors, sector_num = 0;
+ int64_t target_size, ret, bytes, offset = 0;
BlockDriverState *bs = child->bs;
- int n;
+ int n; /* sectors */
- target_sectors = bdrv_nb_sectors(bs);
- if (target_sectors < 0) {
- return target_sectors;
+ target_size = bdrv_getlength(bs);
+ if (target_size < 0) {
+ return target_size;
}
for (;;) {
- nb_sectors = MIN(target_sectors - sector_num,
BDRV_REQUEST_MAX_SECTORS);
- if (nb_sectors <= 0) {
+ bytes = MIN(target_size - offset, BDRV_REQUEST_MAX_BYTES);
+ if (bytes <= 0) {
return 0;
}
- ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &n, NULL);
+ ret = bdrv_get_block_status(bs, offset >> BDRV_SECTOR_BITS,
+ bytes >> BDRV_SECTOR_BITS, &n, NULL);
if (ret < 0) {
- error_report("error getting block status at sector %" PRId64 ":
%s",
- sector_num, strerror(-ret));
+ error_report("error getting block status at offset %" PRId64 ":
%s",
+ offset, strerror(-ret));
return ret;
}
if (ret & BDRV_BLOCK_ZERO) {
- sector_num += n;
+ offset += n * BDRV_SECTOR_BITS;
continue;
}
- ret = bdrv_pwrite_zeroes(child, sector_num << BDRV_SECTOR_BITS,
- n << BDRV_SECTOR_BITS, flags);
+ ret = bdrv_pwrite_zeroes(child, offset, n * BDRV_SECTOR_SIZE, flags);
if (ret < 0) {
- error_report("error writing zeroes at sector %" PRId64 ": %s",
- sector_num, strerror(-ret));
+ error_report("error writing zeroes at offset %" PRId64 ": %s",
+ offset, strerror(-ret));
return ret;
}
- sector_num += n;
+ offset += n * BDRV_SECTOR_SIZE;
}
}
--
2.13.6
- [Qemu-block] [PULL 00/35] Block layer patches, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 02/35] qemu-iotests: Test backing_fmt with backing node reference, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 01/35] block: don't add 'driver' to options when referring to backing via node name, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 03/35] block: Allow NULL file for bdrv_get_block_status(), Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 04/35] block: Add flag to avoid wasted work in bdrv_is_allocated(), Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 05/35] block: Make bdrv_round_to_clusters() signature more useful, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 08/35] qemu-img: Switch get_block_status() to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 06/35] qcow2: Switch is_zero_sectors() to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 09/35] block: Convert bdrv_get_block_status() to bytes, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 07/35] block: Switch bdrv_make_zero() to byte-based,
Kevin Wolf <=
- [Qemu-block] [PULL 11/35] block: Switch BdrvCoGetBlockStatusData to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 10/35] block: Switch bdrv_co_get_block_status() to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 12/35] block: Switch bdrv_common_block_status_above() to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 13/35] block: Switch bdrv_co_get_block_status_above() to byte-based, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 15/35] qemu-img: Simplify logic in img_compare(), Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 16/35] qemu-img: Speed up compare on pre-allocated larger file, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 17/35] qemu-img: Add find_nonzero(), Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 14/35] block: Convert bdrv_get_block_status_above() to bytes, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 18/35] qemu-img: Drop redundant error message in compare, Kevin Wolf, 2017/10/26
- [Qemu-block] [PULL 19/35] qemu-img: Change check_empty_sectors() to byte-based, Kevin Wolf, 2017/10/26