Am 09.05.2014 um 18:27 hat Markus Armbruster geschrieben: > Markus Armbruster <[email protected]> writes: > > > Instead of bdrv_nb_sectors(). > > > > Aside: a few of these callers don't handle errors. I didn't > > investigate whether they should. > > > > Signed-off-by: Markus Armbruster <[email protected]> > > --- > [...] > > diff --git a/block.c b/block.c > > index 44e1f57..1b99cb1 100644 > > --- a/block.c > > +++ b/block.c > [...] > > @@ -3848,21 +3845,21 @@ static int64_t coroutine_fn > > bdrv_co_get_block_status(BlockDriverState *bs, > > int64_t sector_num, > > int nb_sectors, int > > *pnum) > > { > > - int64_t length; > > + int64_t total_sectors; > > int64_t n; > > int64_t ret, ret2; > > > > - length = bdrv_getlength(bs); > > - if (length < 0) { > > - return length; > > + total_sectors = bdrv_getlength(bs); > > + if (total_sectors < 0) { > > + return total_sectors; > > } > > > > - if (sector_num >= (length >> BDRV_SECTOR_BITS)) { > > + if (sector_num >= total_sectors) { > > *pnum = 0; > > return 0; > > } > > > > - n = bs->total_sectors - sector_num; > > + n = total_sectors - sector_num; > > if (n < nb_sectors) { > > nb_sectors = n; > > } > > @@ -3893,8 +3890,8 @@ static int64_t coroutine_fn > > bdrv_co_get_block_status(BlockDriverState *bs, > > ret |= BDRV_BLOCK_ZERO; > > } else if (bs->backing_hd) { > > BlockDriverState *bs2 = bs->backing_hd; > > - int64_t length2 = bdrv_getlength(bs2); > > - if (length2 >= 0 && sector_num >= (length2 >> > > BDRV_SECTOR_BITS)) { > > + int64_t nb_sectors2 = bdrv_getlength(bs2); > > + if (nb_sectors2 >= 0 && sector_num >= nb_sectors2) { > > ret |= BDRV_BLOCK_ZERO; > > } > > } > [...] > > I neglected to actually replace bdrv_getlength() by bdrv_nb_sectors() > here, breaking test 030 (I forgot that make check-block doesn't run all > the tests). With that fixed, the tests pass. Full respin wanted?
Yes, please. I think you're aware of it, but in order to avoid misunderstandings let me mention that there are two places that need a fix here, for both total_sectors and nb_sectors2. Also please consider splitting this patch so that the functions with major changes (bdrv_make_zero, bdrv_co_get_block_status) get separated at least. Kevin
