diff options
author | Peter Wu <peter@lekensteyn.nl> | 2014-08-22 13:16:36 +0200 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2014-08-22 13:37:36 +0200 |
commit | 3404e1bd276f1fe8364f880b88fa90829291e61d (patch) | |
tree | 9e5b9211c058dde1d6197bd185bd9007492eaf6b | |
parent | aa70feb765cdcf80bbad92f7e6a7bb8c5509f284 (diff) | |
download | qemu-3404e1bd276f1fe8364f880b88fa90829291e61d.tar.gz |
block: use bdrv_nb_sectors in bdrv_is_allocated_abovebdrv-getlength-conversion
The difference is that bdrv_nb_sectors() may do a lookup for
variable-sized disks. This gets rid of another direct user of
total_sectors.
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-rw-r--r-- | block.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -4144,6 +4144,7 @@ int bdrv_is_allocated_above(BlockDriverState *top, intermediate = top; while (intermediate && intermediate != base) { int pnum_inter; + int64_t total_sectors; ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors, &pnum_inter); if (ret < 0) { @@ -4153,6 +4154,11 @@ int bdrv_is_allocated_above(BlockDriverState *top, return 1; } + total_sectors = bdrv_nb_sectors(intermediate); + if (total_sectors < 0) { + return (int) total_sectors; + } + /* * [sector_num, nb_sectors] is unallocated on top but intermediate * might have @@ -4161,7 +4167,7 @@ int bdrv_is_allocated_above(BlockDriverState *top, */ if (n > pnum_inter && (intermediate == top || - sector_num + pnum_inter < intermediate->total_sectors)) { + sector_num + pnum_inter < total_sectors)) { n = pnum_inter; } |