From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@gmail.com, jcody@redhat.com
Subject: [Qemu-devel] [PATCH 2/2] vmdk: Read footer for streamOptimized images
Date: Thu, 16 Aug 2012 10:54:31 +0200 [thread overview]
Message-ID: <1345107271-10154-3-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1345107271-10154-1-git-send-email-kwolf@redhat.com>
The footer takes precedence over the header when it exists. It contains
the real grain directory offset that is missing in the header. Without
this patch, streamOptimized images with a footer cannot be read.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/vmdk.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 9648398..c243a96 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -35,6 +35,7 @@
#define VMDK4_FLAG_RGD (1 << 1)
#define VMDK4_FLAG_COMPRESS (1 << 16)
#define VMDK4_FLAG_MARKER (1 << 17)
+#define VMDK4_GD_AT_END 0xffffffffffffffffULL
typedef struct {
uint32_t version;
@@ -451,6 +452,21 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
if (header.capacity == 0 && header.desc_offset) {
return vmdk_open_desc_file(bs, flags, header.desc_offset << 9);
}
+
+ if (header.gd_offset == VMDK4_GD_AT_END) {
+ /*
+ * The footer takes precedence over the header, so read it in. The
+ * footer starts at offset -1024 from the end: One sector for the
+ * footer, and another one for the end-of-stream marker.
+ */
+ ret = bdrv_pread(file,
+ bs->file->total_sectors * 512 - 1024 + sizeof(magic),
+ &header, sizeof(header));
+ if (ret < 0) {
+ return ret;
+ }
+ }
+
l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte)
* le64_to_cpu(header.granularity);
if (l1_entry_sectors == 0) {
--
1.7.6.5
next prev parent reply other threads:[~2012-08-16 8:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-16 8:54 [Qemu-devel] [PATCH 0/2] vmdk: Fix streamOptimized images Kevin Wolf
2012-08-16 8:54 ` [Qemu-devel] [PATCH 1/2] vmdk: Fix header structure Kevin Wolf
2012-08-16 8:54 ` Kevin Wolf [this message]
2012-08-16 9:17 ` [Qemu-devel] [PATCH 2/2] vmdk: Read footer for streamOptimized images Stefan Hajnoczi
2012-08-16 9:50 ` [Qemu-devel] [PATCH v2 " Kevin Wolf
2012-08-16 10:13 ` Stefan Hajnoczi
2012-08-17 11:16 ` Jeff Cody
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345107271-10154-3-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=jcody@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.