Am 30.08.2017 um 23:05 hat Eric Blake geschrieben: > 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 <ebl...@redhat.com> > Reviewed-by: John Snow <js...@redhat.com> > > --- > 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;
Shouldn't this be BDRV_REQUEST_MAX_BYTES? (Which is close to INT_MAX, but rounded down to sector alignment.) Kevin