[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 22/31] VMDK: Opening compressed extent.
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 22/31] VMDK: Opening compressed extent. |
Date: |
Tue, 6 Sep 2011 17:39:37 +0200 |
From: Fam Zheng <address@hidden>
Added flags field for compressed/streamOptimized extents, open and save
image configuration.
Signed-off-by: Fam Zheng <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/vmdk.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/block/vmdk.c b/block/vmdk.c
index 106fdbd..8a96cfd 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;
} QEMU_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;
@@ -423,6 +436,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 = le32_to_cpu(header.flags) & VMDK4_FLAG_MARKER;
ret = vmdk_init_tables(bs, extent);
if (ret) {
/* free extent allocated by vmdk_add_extent */
--
1.7.6
- Re: [Qemu-devel] [PATCH 11/31] block/raw: Fix to forward method bdrv_media_changed(), (continued)
- [Qemu-devel] [PATCH 10/31] ide: Give vmstate structs internal linkage where possible, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 17/31] spitz tosa: Simplify "drive is suitable for microdrive" test, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 12/31] block: Leave tracking media change to device models, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 14/31] block: Clean up bdrv_flush_all(), Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 13/31] fdc: Make media change detection more robust, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 15/31] savevm: Include writable devices with removable media, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 20/31] VMDK: add twoGbMaxExtentSparse support, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 16/31] xen: Clean up pci_piix3_xen_ide_unplug()'s test for "not a CD", Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 22/31] VMDK: Opening compressed extent.,
Kevin Wolf <=
- [Qemu-devel] [PATCH 23/31] VMDK: read/write compressed extent, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 21/31] VMDK: separate vmdk_read_extent/vmdk_write_extent, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 19/31] VMDK: enable twoGbMaxExtentFlat, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 25/31] VMDK: bugfix, open Haiku vmdk image, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 24/31] VMDK: creating streamOptimized subformat, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 18/31] block: Declare qemu_blockalign() in block.h, not block_int.h, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 29/31] scsi: refine constants for READ CAPACITY 16, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 26/31] VMDK: bugfix, opening vSphere 4 exported image, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 31/31] scsi: improve MODE SENSE emulation, Kevin Wolf, 2011/09/06
- [Qemu-devel] [PATCH 27/31] scsi: execute SYNCHRONIZE_CACHE asynchronously, Kevin Wolf, 2011/09/06