From patchwork Wed Aug 26 13:05:38 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glauber Costa X-Patchwork-Id: 32162 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by bilbo.ozlabs.org (Postfix) with ESMTPS id 3D71FB70AD for ; Thu, 27 Aug 2009 03:18:34 +1000 (EST) Received: from localhost ([127.0.0.1]:59484 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MgM8l-0001J4-6q for incoming@patchwork.ozlabs.org; Wed, 26 Aug 2009 13:18:31 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MgLwc-0002JF-5l for qemu-devel@nongnu.org; Wed, 26 Aug 2009 13:05:58 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MgLwW-0002BK-L3 for qemu-devel@nongnu.org; Wed, 26 Aug 2009 13:05:56 -0400 Received: from [199.232.76.173] (port=45778 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MgLwW-0002Ay-6V for qemu-devel@nongnu.org; Wed, 26 Aug 2009 13:05:52 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23245) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MgLwV-0000X6-DZ for qemu-devel@nongnu.org; Wed, 26 Aug 2009 13:05:51 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n7QH5o1k032128; Wed, 26 Aug 2009 13:05:50 -0400 Received: from localhost.localdomain (virtlab1.virt.bos.redhat.com [10.16.72.21]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7QH5kJn009197; Wed, 26 Aug 2009 13:05:49 -0400 From: Glauber Costa To: qemu-devel@nongnu.org Date: Wed, 26 Aug 2009 09:05:38 -0400 Message-Id: <1251291946-25821-5-git-send-email-glommer@redhat.com> In-Reply-To: <1251291946-25821-4-git-send-email-glommer@redhat.com> References: <1251291946-25821-1-git-send-email-glommer@redhat.com> <1251291946-25821-2-git-send-email-glommer@redhat.com> <1251291946-25821-3-git-send-email-glommer@redhat.com> <1251291946-25821-4-git-send-email-glommer@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Kevin Wolf , aliguori@us.ibm.com Subject: [Qemu-devel] [PATCH 04/12] vmdk: Fix backing file handling X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Kevin Wolf Instead of storing the backing file in its own BlockDriverState, VMDK uses the BlockDriverState of the raw image file it opened. This is wrong and breaks functions that access the backing file or protocols. This fix replaces all occurrences of s->hd->backing_* with bs->backing_*. This fixes qemu-iotests failure in 020 (Commit changes to backing file). Signed-off-by: Kevin Wolf Signed-off-by: Anthony Liguori Signed-off-by: Glauber Costa --- block-vmdk.c | 29 +++++++++++++++-------------- 1 files changed, 15 insertions(+), 14 deletions(-) diff --git a/block-vmdk.c b/block-vmdk.c index 71d7504..1f2ad17 100644 --- a/block-vmdk.c +++ b/block-vmdk.c @@ -169,7 +169,7 @@ static int vmdk_is_cid_valid(BlockDriverState *bs) { #ifdef CHECK_CID BDRVVmdkState *s = bs->opaque; - BlockDriverState *p_bs = s->hd->backing_hd; + BlockDriverState *p_bs = bs->backing_hd; uint32_t cur_pcid; if (p_bs) { @@ -337,26 +337,26 @@ static int vmdk_parent_open(BlockDriverState *bs, const char * filename) p_name += sizeof("parentFileNameHint") + 1; if ((end_name = strchr(p_name,'\"')) == 0) return -1; - if ((end_name - p_name) > sizeof (s->hd->backing_file) - 1) + if ((end_name - p_name) > sizeof (bs->backing_file) - 1) return -1; - pstrcpy(s->hd->backing_file, end_name - p_name + 1, p_name); - if (stat(s->hd->backing_file, &file_buf) != 0) { + pstrcpy(bs->backing_file, end_name - p_name + 1, p_name); + if (stat(bs->backing_file, &file_buf) != 0) { path_combine(parent_img_name, sizeof(parent_img_name), - filename, s->hd->backing_file); + filename, bs->backing_file); } else { pstrcpy(parent_img_name, sizeof(parent_img_name), - s->hd->backing_file); + bs->backing_file); } - s->hd->backing_hd = bdrv_new(""); - if (!s->hd->backing_hd) { + bs->backing_hd = bdrv_new(""); + if (!bs->backing_hd) { failure: bdrv_close(s->hd); return -1; } parent_open = 1; - if (bdrv_open(s->hd->backing_hd, parent_img_name, BDRV_O_RDONLY) < 0) + if (bdrv_open(bs->backing_hd, parent_img_name, BDRV_O_RDONLY) < 0) goto failure; parent_open = 0; } @@ -463,13 +463,14 @@ static int get_whole_cluster(BlockDriverState *bs, uint64_t cluster_offset, // we will be here if it's first write on non-exist grain(cluster). // try to read from parent image, if exist - if (s->hd->backing_hd) { - BDRVVmdkState *ps = s->hd->backing_hd->opaque; + if (bs->backing_hd) { + BDRVVmdkState *ps = bs->backing_hd->opaque; if (!vmdk_is_cid_valid(bs)) return -1; - parent_cluster_offset = get_cluster_offset(s->hd->backing_hd, NULL, offset, allocate); + parent_cluster_offset = get_cluster_offset(bs->backing_hd, NULL, + offset, allocate); if (parent_cluster_offset) { BDRVVmdkState *act_s = activeBDRV.hd->opaque; @@ -620,10 +621,10 @@ static int vmdk_read(BlockDriverState *bs, int64_t sector_num, n = nb_sectors; if (!cluster_offset) { // try to read from parent image, if exist - if (s->hd->backing_hd) { + if (bs->backing_hd) { if (!vmdk_is_cid_valid(bs)) return -1; - ret = bdrv_read(s->hd->backing_hd, sector_num, buf, n); + ret = bdrv_read(bs->backing_hd, sector_num, buf, n); if (ret < 0) return -1; } else {