From patchwork Wed Mar 23 03:33:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Cody X-Patchwork-Id: 601097 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3qVFYm6mShz9ssP for ; Wed, 23 Mar 2016 14:34:52 +1100 (AEDT) Received: from localhost ([::1]:40724 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiZYz-0007V7-8l for incoming@patchwork.ozlabs.org; Tue, 22 Mar 2016 23:34:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49592) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiZYS-0006Od-6k for qemu-devel@nongnu.org; Tue, 22 Mar 2016 23:33:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aiZYQ-0003ZZ-Sy for qemu-devel@nongnu.org; Tue, 22 Mar 2016 23:33:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38264) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiZYL-0003Xm-6i; Tue, 22 Mar 2016 23:33:49 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id D2BCC80E4A; Wed, 23 Mar 2016 03:33:48 +0000 (UTC) Received: from localhost (ovpn-112-65.phx2.redhat.com [10.3.112.65]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2N3XlTv018513 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO); Tue, 22 Mar 2016 23:33:48 -0400 From: Jeff Cody To: qemu-block@nongnu.org Date: Tue, 22 Mar 2016 23:33:38 -0400 Message-Id: <0cf3d19bbc32776d12b46cd471f82c20ea9ce182.1458702790.git.jcody@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: kwolf@redhat.com, grantwwu@gmail.com, qemu-devel@nongnu.org, stefanha@redhat.com, sbaugh@catern.com Subject: [Qemu-devel] [PATCH for-2.6 1/7] block/vpc: fix VPC 'qemu-img create' regression 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 Commit 'b8f45cdf7827e39f9a1e6cc446f5972cc6144237' switched VPC over to using blk_pwrite() instead of bdrv_pwrite_sync(). The return value of bdrv_pwrite_sync() was always 0 for success, and create_dynamic_disk() in one instance checked for a non-zero return value to indicate error. However, blk_pwrite() may return positive values for success. This fails silently as well, since vpc_create() did not set errp in this failuer case. Set errp in all instances in vpc_create(). Signed-off-by: Jeff Cody --- block/vpc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/block/vpc.c b/block/vpc.c index 8435205..bc3d1c6 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -774,7 +774,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf, num_bat_entries = (total_sectors + block_size / 512) / (block_size / 512); ret = blk_pwrite(blk, offset, buf, HEADER_SIZE); - if (ret) { + if (ret < 0) { goto fail; } @@ -873,6 +873,7 @@ static int vpc_create(const char *filename, QemuOpts *opts, Error **errp) } else if (!strcmp(disk_type_param, "fixed")) { disk_type = VHD_FIXED; } else { + error_setg(errp, "Invalid disk type, %s", disk_type_param); ret = -EINVAL; goto out; } @@ -924,6 +925,7 @@ static int vpc_create(const char *filename, QemuOpts *opts, Error **errp) total_sectors = total_size / BDRV_SECTOR_SIZE; /* Allow a maximum disk size of approximately 2 TB */ if (total_sectors > VHD_MAX_SECTORS) { + error_setg(errp, "Disk size is too large, max size is 2040 GiB"); ret = -EFBIG; goto out; } @@ -974,6 +976,9 @@ static int vpc_create(const char *filename, QemuOpts *opts, Error **errp) } else { ret = create_fixed_disk(blk, buf, total_size); } + if (ret < 0) { + error_setg(errp, "Unable to create or write VHD header"); + } out: blk_unref(blk);