From patchwork Thu Aug 29 14:00:09 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 270869 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id ED8182C00BD for ; Fri, 30 Aug 2013 00:48:54 +1000 (EST) Received: from localhost ([::1]:43584 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF2rb-0005li-L8 for incoming@patchwork.ozlabs.org; Thu, 29 Aug 2013 10:06:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53998) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF2mS-0006h8-Jy for qemu-devel@nongnu.org; Thu, 29 Aug 2013 10:01:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VF2mK-00087P-7s for qemu-devel@nongnu.org; Thu, 29 Aug 2013 10:01:00 -0400 Received: from mail-ea0-x233.google.com ([2a00:1450:4013:c01::233]:37588) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF2mK-000877-0h for qemu-devel@nongnu.org; Thu, 29 Aug 2013 10:00:52 -0400 Received: by mail-ea0-f179.google.com with SMTP id b10so262528eae.24 for ; Thu, 29 Aug 2013 07:00:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=gWLzqPJWZX014V8pb1GqU0MKYnW6vqnDxWaJZO+s7Y0=; b=fo2Xgb76b0FxYRjMLOoW8/SSuJJsgBLO3sLxtHNSEotwK5as2NmvuAjMJlR/OYCoKX sbDe/Ls7BSE8VUWzA4+P7CAJfYP3hDZv8LzcUYe1eDUJ+mAIql/RRcI9QEy9YLyXHh/f 5xMiek8Lw80xQzewJ2EhbYLGgu+PRJwiGltUQRqPyZ8iC1da4ViEuRiJD7AanH36DOiy bhqURgEOcsrA6pNh9EQ/PuCzXsSpdbKQBj5xHwQ8EYAMhgkaXUvEVnFa5l3BD7I/hkuM qS5LuhOnMEA8lyzSRZUp0rduNgnVizkvWb0MZecD6eRHxz15ykIokiEVY0epKTN5zGIt pG3w== X-Received: by 10.14.194.131 with SMTP id m3mr4645920een.45.1377784851126; Thu, 29 Aug 2013 07:00:51 -0700 (PDT) Received: from yakj.usersys.redhat.com (nat-pool-mxp-t.redhat.com. [209.132.186.18]) by mx.google.com with ESMTPSA id p5sm46359028eeg.5.1969.12.31.16.00.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 29 Aug 2013 07:00:50 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 29 Aug 2013 16:00:09 +0200 Message-Id: <1377784821-29561-10-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1377784821-29561-1-git-send-email-pbonzini@redhat.com> References: <1377784821-29561-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4013:c01::233 Cc: kwolf@redhat.com, stefanha@redhat.com Subject: [Qemu-devel] [PATCH v4 09/21] qemu-img: always probe the input image for allocated sectors X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org qemu-img convert can assume "that sectors which are unallocated in the input image are present in both the output's and input's base images". However it is only doing this if the output image returns true for bdrv_has_zero_init(). Testing bdrv_has_zero_init() does not make much sense if the output image is copy-on-write, because a copy-on-write image is never initialized to zero (it is initialized to the content of the backing file). There is nothing here that makes has_zero_init images special. The input and output must be equal for the operation to make sense, and that's it. Reviewed-by: Eric Blake Signed-off-by: Paolo Bonzini --- qemu-img.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index b01998b..837f8bc 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1479,28 +1479,26 @@ 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) { - ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, - n, &n1); - if (ret < 0) { - error_report("error while reading metadata for sector " - "%" PRId64 ": %s", - sector_num - bs_offset, strerror(-ret)); - goto out; - } - if (!ret) { - 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) { + ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, + n, &n1); + if (ret < 0) { + error_report("error while reading metadata for sector " + "%" PRId64 ": %s", + sector_num - bs_offset, strerror(-ret)); + goto out; + } + if (!ret) { + 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; }