qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 28/30] stream: do not copy unallocated sectors from the base
Date: Thu, 10 May 2012 13:49:32 +0200	[thread overview]
Message-ID: <1336650574-12835-29-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1336650574-12835-1-git-send-email-kwolf@redhat.com>

From: Paolo Bonzini <pbonzini@redhat.com>

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 <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 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

  parent reply	other threads:[~2012-05-10 11:50 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-10 11:49 [Qemu-devel] [PULL 00/30] Block patches for 1.1 Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 01/30] block: add the support to drain throttled requests Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 02/30] block: add mode argument to blockdev-snapshot-sync Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 03/30] block: fail live snapshot if disk has no medium Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 04/30] block: push bdrv_change_backing_file error checking up from drivers Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 05/30] block: update in-memory backing file and format Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 06/30] block: open backing file as read-only when probing for size Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 07/30] block: fix allocation size for dirty bitmap Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 08/30] qemu-iotests: strip spaces from qemu-img/qemu-io/qemu command lines Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 09/30] qtest: Add function to send QMP commands Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 10/30] qtest: Add floppy test Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 11/30] block: fix snapshot on QED Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 12/30] block: another bdrv_append fix Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 13/30] block: do not reuse the backing file across bdrv_close/bdrv_open Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 14/30] block: fully delete bs->file when closing Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 15/30] block: add block_job_sleep_ns Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 16/30] block: wait for job callback in block_job_cancel_sync Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 17/30] block: simplify path_is_absolute Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 18/30] block: protect path_has_protocol from filenames with colons Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 19/30] block: move field reset from bdrv_open_common to bdrv_close Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 20/30] qemu-img: make "info" backing file output correct and easier to use Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 21/30] qemu-io: correctly print non-integer values as decimals Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 22/30] qemu-io: fix the alloc command Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 23/30] stream: fix sectors not allocated test Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 24/30] stream: add testcase for partial streaming Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 25/30] stream: pass new base image format to bdrv_change_backing_file Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 26/30] stream: fix HMP block_job_set_speed Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 27/30] stream: fix ratelimiting corner case Kevin Wolf
2012-05-10 11:49 ` Kevin Wolf [this message]
2012-05-10 11:49 ` [Qemu-devel] [PATCH 29/30] tests/Makefile: Add missing $(EXESUF) Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 30/30] declare ECANCELED on all machines Kevin Wolf
2012-05-14 15:03 ` [Qemu-devel] [PULL 00/30] Block patches for 1.1 Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1336650574-12835-29-git-send-email-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).