summary refs log tree commit diff stats
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()