[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1.1 18/22] stream: do not copy unallocated sectors f
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 1.1 18/22] stream: do not copy unallocated sectors from the base |
Date: |
Tue, 8 May 2012 16:51:58 +0200 |
Unallocated sectors should really never be accessed by the guest,
so there's no need to copy them during the streaming process.
If they are read by the guest during streaming, guest-initiated
copy-on-read will copy them (we're in the base == NULL case, which
enables copy on read). If they are read after we disconnect the
image from the base, they will read as zeroes anyway.
Signed-off-by: Paolo Bonzini <address@hidden>
---
This is a semantic change. We could delay it to 1.2 as
a bug fix, or do it now to avoid changing semantics in the
next release.
block/stream.c | 18 ++++--------------
tests/qemu-iotests/030 | 5 +++--
2 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/block/stream.c b/block/stream.c
index a2c8f67..608a860 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 0aa7a0a..61cb027 100755
--- a/tests/qemu-iotests/030
+++ b/tests/qemu-iotests/030
@@ -82,8 +82,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()
--
1.7.10.1
- [Qemu-devel] [PATCH 1.1 06/22] block: wait for job callback in block_job_cancel_sync, (continued)
- [Qemu-devel] [PATCH 1.1 06/22] block: wait for job callback in block_job_cancel_sync, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 07/22] block: simplify path_is_absolute, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 09/22] block: move field reset from bdrv_open_common to bdrv_close, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 08/22] block: protect path_has_protocol from filenames with colons, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 10/22] qemu-img: make "info" backing file output correct and easier to use, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 13/22] stream: fix sectors not allocated test, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 16/22] stream: fix HMP block_job_set_speed, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 14/22] stream: add testcase for partial streaming, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 15/22] stream: pass new base image format to bdrv_change_backing_file, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 17/22] stream: fix ratelimiting corner case, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 18/22] stream: do not copy unallocated sectors from the base,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 1.1 20/22] stream: tweak usage of bdrv_co_is_allocated, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 21/22] stream: move is_allocated_above to block.c, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 22/22] stream: move rate limiting to a separate header file, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 11/22] qemu-io: correctly print non-integer values as decimals, Paolo Bonzini, 2012/05/08
- [Qemu-devel] [PATCH 1.1 19/22] block: implement is_allocated for raw, Paolo Bonzini, 2012/05/08