From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:45576) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGosL-0003iY-LK for qemu-devel@nongnu.org; Thu, 20 Oct 2011 05:25:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RGosH-0005Bs-G4 for qemu-devel@nongnu.org; Thu, 20 Oct 2011 05:25:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:22864) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGosH-0005Bi-6V for qemu-devel@nongnu.org; Thu, 20 Oct 2011 05:25:17 -0400 Message-ID: <4E9FE9A5.7090809@redhat.com> Date: Thu, 20 Oct 2011 11:28:05 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <1319036398-14320-1-git-send-email-pbonzini@redhat.com> <1319036398-14320-4-git-send-email-pbonzini@redhat.com> In-Reply-To: <1319036398-14320-4-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/8] vmdk: clean up open List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Feiran Zheng , qemu-devel@nongnu.org, stefanha@linux.vnet.ibm.com Am 19.10.2011 16:59, schrieb Paolo Bonzini: > Signed-off-by: Paolo Bonzini > --- > block/vmdk.c | 37 +++++++++++++++---------------------- > 1 files changed, 15 insertions(+), 22 deletions(-) > > diff --git a/block/vmdk.c b/block/vmdk.c > index 21566eb..12b38d2 100644 > --- a/block/vmdk.c > +++ b/block/vmdk.c > @@ -622,20 +622,7 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, > return -ENOTSUP; > } > s->desc_offset = 0; > - ret = vmdk_parse_extents(buf, bs, bs->file->filename); > - if (ret) { > - vmdk_free_extents(bs); > - return ret; > - } > - > - /* try to open parent images, if exist */ > - ret = vmdk_parent_open(bs); > - if (ret) { > - vmdk_free_extents(bs); > - return ret; > - } > - s->parent_cid = vmdk_read_cid(bs, 1); > - return 0; > + return vmdk_parse_extents(buf, bs, bs->file->filename); > } This code is moved into bdrv_open, but there's another path how this code can be reached: vmdk_parse_extents() -> vmdk_open_sparse() -> vmdk_open_vmdk4() -> vmdk_open_desc_file(). Don't we forget to open the parent file there now? Kevin > > static int vmdk_open(BlockDriverState *bs, int flags) > @@ -645,17 +632,23 @@ static int vmdk_open(BlockDriverState *bs, int flags) > > if (vmdk_open_sparse(bs, bs->file, flags) == 0) { > s->desc_offset = 0x200; > - /* try to open parent images, if exist */ > - ret = vmdk_parent_open(bs); > + } else { > + ret = vmdk_open_desc_file(bs, flags, 0); > if (ret) { > - vmdk_free_extents(bs); > - return ret; > + goto fail; > } > - s->parent_cid = vmdk_read_cid(bs, 1); > - return 0; > - } else { > - return vmdk_open_desc_file(bs, flags, 0); > } > + /* try to open parent images, if exist */ > + ret = vmdk_parent_open(bs); > + if (ret) { > + goto fail; > + } > + s->parent_cid = vmdk_read_cid(bs, 1); > + return ret; > + > +fail: > + vmdk_free_extents(bs); > + return ret; > } > > static int get_whole_cluster(BlockDriverState *bs,