From: Fam Zheng <famcool@gmail.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, Fam Zheng <famcool@gmail.com>,
hch@lst.de, stefanha@gmail.com
Subject: [Qemu-devel] [PATCH 4/6] VMDK: Opening compressed extent.
Date: Wed, 27 Jul 2011 17:27:44 +0800 [thread overview]
Message-ID: <1311758866-30029-5-git-send-email-famcool@gmail.com> (raw)
In-Reply-To: <1311758866-30029-1-git-send-email-famcool@gmail.com>
Added flags field for compressed/streamOptimized extents, open and save
image configuration.
Signed-off-by: Fam Zheng <famcool@gmail.com>
---
block/vmdk.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 0d989f6..5f1638e 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -26,9 +26,13 @@
#include "qemu-common.h"
#include "block_int.h"
#include "module.h"
+#include "zlib.h"
#define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D')
#define VMDK4_MAGIC (('K' << 24) | ('D' << 16) | ('M' << 8) | 'V')
+#define VMDK4_COMPRESSION_DEFLATE 1
+#define VMDK4_FLAG_COMPRESS (1 << 16)
+#define VMDK4_FLAG_MARKER (1 << 17)
typedef struct {
uint32_t version;
@@ -56,6 +60,7 @@ typedef struct {
int64_t grain_offset;
char filler[1];
char check_bytes[4];
+ uint16_t compressAlgorithm;
} __attribute__((packed)) VMDK4Header;
#define L2_CACHE_SIZE 16
@@ -63,6 +68,8 @@ typedef struct {
typedef struct VmdkExtent {
BlockDriverState *file;
bool flat;
+ bool compressed;
+ bool has_marker;
int64_t sectors;
int64_t end_sector;
int64_t flat_start_offset;
@@ -98,6 +105,12 @@ typedef struct VmdkMetaData {
int valid;
} VmdkMetaData;
+typedef struct VmdkGrainMarker {
+ uint64_t lba;
+ uint32_t size;
+ uint8_t data[0];
+} VmdkGrainMarker;
+
static int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
{
uint32_t magic;
@@ -415,6 +428,9 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
l1_size,
le32_to_cpu(header.num_gtes_per_gte),
le64_to_cpu(header.granularity));
+ extent->compressed =
+ le16_to_cpu(header.compressAlgorithm) == VMDK4_COMPRESSION_DEFLATE;
+ extent->has_marker = header.flags & VMDK4_FLAG_MARKER;
ret = vmdk_init_tables(bs, extent);
if (ret) {
/* free extent allocated by vmdk_add_extent */
next prev parent reply other threads:[~2011-07-27 9:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-27 9:27 [Qemu-devel] [PATCH 0/6] Add various VMDK subformats support Fam Zheng
2011-07-27 9:27 ` [Qemu-devel] [PATCH 1/6] VMDK: enable twoGbMaxExtentFlat Fam Zheng
2011-07-29 1:42 ` Fam Zheng
2011-07-30 4:43 ` Fam Zheng
2011-07-27 9:27 ` [Qemu-devel] [PATCH 2/6] VMDK: add twoGbMaxExtentSparse support Fam Zheng
2011-08-02 10:32 ` Stefan Hajnoczi
2011-08-04 2:35 ` Fam Zheng
2011-08-04 10:36 ` Stefan Hajnoczi
2011-07-27 9:27 ` [Qemu-devel] [PATCH 3/6] VMDK: separate vmdk_read_extent/vmdk_write_extent Fam Zheng
2011-07-27 9:27 ` Fam Zheng [this message]
2011-08-02 10:59 ` [Qemu-devel] [PATCH 4/6] VMDK: Opening compressed extent Stefan Hajnoczi
2011-07-27 9:27 ` [Qemu-devel] [PATCH 5/6] VMDK: read/write " Fam Zheng
2011-08-02 11:11 ` Stefan Hajnoczi
2011-07-27 9:27 ` [Qemu-devel] [PATCH 6/6] VMDK: creating streamOptimized subformat Fam Zheng
2011-08-06 4:10 ` [Qemu-devel] [PATCH v2 2/6] VMDK: add twoGbMaxExtentSparse support Fam Zheng
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=1311758866-30029-5-git-send-email-famcool@gmail.com \
--to=famcool@gmail.com \
--cc=hch@lst.de \
--cc=kwolf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).