On 10/10/2017 09:15 AM, Kevin Wolf wrote: > Am 04.10.2017 um 04:00 hat Eric Blake geschrieben: >> We are gradually converting to byte-based interfaces, as they are >> easier to reason about than sector-based. Convert another internal >> function (no semantic change), and rename it to is_zero() in the >> process. >> >> Signed-off-by: Eric Blake <[email protected]> >> Reviewed-by: Fam Zheng <[email protected]> >> Reviewed-by: John Snow <[email protected]> >>
>> +static bool is_zero(BlockDriverState *bs, int64_t offset, int64_t bytes)
>> {
>> int nr;
>> int64_t res;
>> + int64_t start;
>>
>> - if (start + count > bs->total_sectors) {
>> - count = bs->total_sectors - start;
>> + /* Widen to sector boundaries, then clamp to image length, before
>> + * checking status of underlying sectors */
>> + start = QEMU_ALIGN_DOWN(offset, BDRV_SECTOR_SIZE);
>> + bytes = QEMU_ALIGN_UP(offset + bytes, BDRV_SECTOR_SIZE) - start;
>
> Why do we still widen to sector boundaries after this series is fully
> applied? Isn't the whole point that we don't have to do this any more?
The widening is necessary as long as...
>> + res = bdrv_get_block_status_above(bs, NULL, start >> BDRV_SECTOR_BITS,
>> + bytes >> BDRV_SECTOR_BITS, &nr, NULL);
we still shift. But you are right; patch 12/23 should be able to drop
the rounding. I'll double check that it still works, but assuming that
it does, v6 will include that cleanup.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
