summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-08-22 13:16:36 +0200
committerPeter Wu <peter@lekensteyn.nl>2014-08-22 13:37:36 +0200
commit3404e1bd276f1fe8364f880b88fa90829291e61d (patch)
tree9e5b9211c058dde1d6197bd185bd9007492eaf6b
parentaa70feb765cdcf80bbad92f7e6a7bb8c5509f284 (diff)
downloadqemu-bdrv-getlength-conversion.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.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/block.c b/block.c
index 2d003f0584..8a17ba22d6 100644
--- a/block.c
+++ b/block.c
@@ -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;
}