summaryrefslogtreecommitdiffstats
path: root/block.c
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2013-01-24 10:02:08 -0800
committerStefan Hajnoczi <stefanha@redhat.com>2013-02-01 14:58:28 +0100
commit63ba17d39f1a8d262b31ea6a07dd3eb45d5a41e2 (patch)
tree2c1257345ddaf24f7d1b4155dd4140fd9ac02460 /block.c
parentb93d6d2468ba81b9e373066004f2084efbdcc9d6 (diff)
downloadhqemu-63ba17d39f1a8d262b31ea6a07dd3eb45d5a41e2.zip
hqemu-63ba17d39f1a8d262b31ea6a07dd3eb45d5a41e2.tar.gz
block: Fix is_allocated_above with resized files
In an image chain, if the base image is smaller than the current image, we need to make sure to use the current images count of unallocated blocks once we get to the end of the base image. Without this change the code will return 0 blocks when it gets to the end of the base image and mirror_run will fail its assertion. Signed-off-by: Vishvananda Ishaya <vishvananda@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r--block.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/block.c b/block.c
index ba67c0d..50dab8e 100644
--- a/block.c
+++ b/block.c
@@ -2800,7 +2800,9 @@ int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top,
*
* [sector_num+x, nr_sectors] allocated.
*/
- if (n > pnum_inter) {
+ if (n > pnum_inter &&
+ (intermediate == top ||
+ sector_num + pnum_inter < intermediate->total_sectors)) {
n = pnum_inter;
}
OpenPOWER on IntegriCloud