From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2MSl-0003Pi-UL for qemu-devel@nongnu.org; Thu, 25 Jul 2013 10:24:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V2MSg-0007uj-Up for qemu-devel@nongnu.org; Thu, 25 Jul 2013 10:24:15 -0400 Received: from mail-ye0-x22a.google.com ([2607:f8b0:4002:c04::22a]:39168) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2MSg-0007uf-Q5 for qemu-devel@nongnu.org; Thu, 25 Jul 2013 10:24:10 -0400 Received: by mail-ye0-f170.google.com with SMTP id g12so198558yee.1 for ; Thu, 25 Jul 2013 07:24:10 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Thu, 25 Jul 2013 16:23:06 +0200 Message-Id: <1374762197-7261-9-git-send-email-pbonzini@redhat.com> In-Reply-To: <1374762197-7261-1-git-send-email-pbonzini@redhat.com> References: <1374762197-7261-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH v3 08/19] qemu-img: always probe the input image for allocated sectors List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pl@kamp.de, stefanha@redhat.com qemu-img convert is assuming "that sectors which are unallocated in the input image are present in both the output's and input's base images", but it is only doing this if the output image is zero initialized. And checking if the output image is zero initialized does not make much sense if the output image is copy-on-write. Always do the test. Reviewed-by: Eric Blake Signed-off-by: Paolo Bonzini --- qemu-img.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index a4957eb..3faffee 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1476,21 +1476,19 @@ static int img_convert(int argc, char **argv) n = bs_offset + bs_sectors - sector_num; } - if (has_zero_init) { - /* If the output image is being created as a copy on write image, - assume that sectors which are unallocated in the input image - are present in both the output's and input's base images (no - need to copy them). */ - if (out_baseimg) { - if (!bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, - n, &n1)) { - sector_num += n1; - continue; - } - /* The next 'n1' sectors are allocated in the input image. Copy - only those as they may be followed by unallocated sectors. */ - n = n1; + /* If the output image is being created as a copy on write image, + assume that sectors which are unallocated in the input image + are present in both the output's and input's base images (no + need to copy them). */ + if (out_baseimg) { + if (!bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, + n, &n1)) { + sector_num += n1; + continue; } + /* The next 'n1' sectors are allocated in the input image. Copy + only those as they may be followed by unallocated sectors. */ + n = n1; } else { n1 = n; } -- 1.8.3.1