[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 28/30] stream: do not copy unallocated sectors from
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 28/30] stream: do not copy unallocated sectors from the base |
Date: |
Thu, 10 May 2012 13:49:32 +0200 |
From: Paolo Bonzini <address@hidden>
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>
Signed-off-by: Kevin Wolf <address@hidden>
---
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 277a98b..eb7bf99 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()
--
1.7.6.5
- [Qemu-devel] [PATCH 11/30] block: fix snapshot on QED, (continued)
- [Qemu-devel] [PATCH 11/30] block: fix snapshot on QED, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 15/30] block: add block_job_sleep_ns, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 16/30] block: wait for job callback in block_job_cancel_sync, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 23/30] stream: fix sectors not allocated test, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 19/30] block: move field reset from bdrv_open_common to bdrv_close, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 26/30] stream: fix HMP block_job_set_speed, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 27/30] stream: fix ratelimiting corner case, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 22/30] qemu-io: fix the alloc command, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 24/30] stream: add testcase for partial streaming, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 25/30] stream: pass new base image format to bdrv_change_backing_file, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 28/30] stream: do not copy unallocated sectors from the base,
Kevin Wolf <=
- [Qemu-devel] [PATCH 29/30] tests/Makefile: Add missing $(EXESUF), Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 30/30] declare ECANCELED on all machines, Kevin Wolf, 2012/05/10
- [Qemu-devel] [PATCH 21/30] qemu-io: correctly print non-integer values as decimals, Kevin Wolf, 2012/05/10
- Re: [Qemu-devel] [PULL 00/30] Block patches for 1.1, Anthony Liguori, 2012/05/14