Am 27.06.2017 um 21:24 hat Eric Blake geschrieben: > We are gradually converting to byte-based interfaces, as they are > easier to reason about than sector-based. Change the internal > loop iteration of streaming 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 <ebl...@redhat.com> > Reviewed-by: John Snow <js...@redhat.com> > > --- > v2: no change > --- > block/stream.c | 24 ++++++++++-------------- > 1 file changed, 10 insertions(+), 14 deletions(-) > > diff --git a/block/stream.c b/block/stream.c > index 746d525..2f9618b 100644 > --- a/block/stream.c > +++ b/block/stream.c > @@ -108,12 +108,11 @@ static void coroutine_fn stream_run(void *opaque) > BlockBackend *blk = s->common.blk; > BlockDriverState *bs = blk_bs(blk); > BlockDriverState *base = s->base; > - int64_t sector_num = 0; > - int64_t end = -1;
Here, end was initialised to -1. This made a differnce for early 'goto out' paths because otherwise data->reached_end would incorrectly be true in stream_complete. Because we also check data->ret, I think the only case where it actually makes a difference is for the !bs->backing case: This used to result in data->reached_end == false, but now it ends up as true. This is because s->common.len hasn't been set yet, so it is still 0. Kevin