qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 */

  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).