aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--block/stream.c18
-rwxr-xr-xtests/qemu-iotests/0305
2 files changed, 7 insertions, 16 deletions
diff --git a/block/stream.c b/block/stream.c
index a2c8f67711..608a860aa2 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -130,14 +130,9 @@ static int coroutine_fn is_allocated_base(BlockDriverState *top,
*/
intermediate = top->backing_hd;
- while (intermediate) {
+ while (intermediate != base) {
int pnum_inter;
- /* reached base */
- if (intermediate == base) {
- *pnum = n;
- return 1;
- }
ret = bdrv_co_is_allocated(intermediate, sector_num, nb_sectors,
&pnum_inter);
if (ret < 0) {
@@ -160,6 +155,7 @@ static int coroutine_fn is_allocated_base(BlockDriverState *top,
intermediate = intermediate->backing_hd;
}
+ *pnum = n;
return 1;
}
@@ -203,14 +199,8 @@ wait:
break;
}
- if (base) {
- ret = is_allocated_base(bs, base, sector_num,
- STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n);
- } else {
- ret = bdrv_co_is_allocated(bs, sector_num,
- STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE,
- &n);
- }
+ ret = is_allocated_base(bs, base, sector_num,
+ STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n);
trace_stream_one_iteration(s, sector_num, n, ret);
if (ret == 0) {
if (s->common.speed) {
diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030
index 277a98be72..eb7bf996d1 100755
--- a/tests/qemu-iotests/030
+++ b/tests/qemu-iotests/030
@@ -83,8 +83,9 @@ class TestSingleDrive(ImageStreamingTestCase):
self.assert_no_active_streams()
self.vm.shutdown()
- self.assertFalse('sectors not allocated' in qemu_io('-c', 'map', test_img),
- 'image file not fully populated after streaming')
+ self.assertEqual(qemu_io('-c', 'map', backing_img),
+ qemu_io('-c', 'map', test_img),
+ 'image file map does not match backing file after streaming')
def test_stream_partial(self):
self.assert_no_active_streams()