[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL v2 33/37] block: vhdx - add .bdrv_create() suppor
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PULL v2 33/37] block: vhdx - add .bdrv_create() support |
Date: |
Fri, 21 Feb 2014 13:06:43 +0100 |
On 08.11.2013, at 11:12, Stefan Hajnoczi <address@hidden> wrote:
> From: Jeff Cody <address@hidden>
>
> This adds support for VHDX image creation, for images of type "Fixed"
> and "Dynamic". "Differencing" types (i.e., VHDX images with backing
> files) are currently not supported.
>
> Options for image creation include:
> * log size:
> The size of the journaling log for VHDX. Minimum is 1MB,
> and it must be a multiple of 1MB. Invalid log sizes will be
> silently fixed by rounding up to the nearest MB.
>
> Default is 1MB.
>
> * block size:
> This is the size of a payload block. The range is 1MB to 256MB,
> inclusive, and must be a multiple of 1MB as well. Invalid sizes
> and multiples will be silently fixed. If '0' is passed, then
> a sane size is chosen (depending on virtual image size).
>
> Default is 0 (Auto-select).
>
> * subformat:
> - "dynamic"
> An image without data pre-allocated.
> - "fixed"
> An image with data pre-allocated.
>
> Default is "dynamic"
>
> When creating the image file, the lettered sections are created:
>
> -----------------------------------------------------------------.
> | (A) | (B) | (C) | (D) | (E)
> | File ID | Header1 | Header 2 | Region Tbl 1 | Region Tbl 2
> | | | | |
> .-----------------------------------------------------------------.
> 0 64KB 128KB 192KB 256KB 320KB
>
> .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------.
> | (F) | (G) | (H) |
> | Journal Log | BAT / Bitmap | Metadata | .... data ......
> | | | |
> .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------.
> 1MB (var.) (var.) (var.)
>
> Signed-off-by: Jeff Cody <address@hidden>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> block/vhdx.c | 558 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> block/vhdx.h | 15 +-
> 2 files changed, 572 insertions(+), 1 deletion(-)
>
>
[..…]
> /* Header for the region table block */
> +#define VHDX_REGION_SIGNATURE 0x69676572 /* "regi" in ASCII */
> typedef struct QEMU_PACKED VHDXRegionTableHeader {
> uint32_t signature; /* "regi" in ASCII */
> uint32_t checksum; /* CRC-32C hash of the 64KB table */
> @@ -238,6 +247,7 @@ typedef uint64_t VHDXBatEntry;
> #define VHDX_METADATA_MAX_ENTRIES 2047 /* not including the header */
> #define VHDX_METADATA_TABLE_MAX_SIZE \
> (VHDX_METADATA_ENTRY_SIZE * (VHDX_METADATA_MAX_ENTRIES+1))
> +#define VHDX_METADATA_SIGNATURE 0x617461646174656D /* "metadata" in ASCII */
This is missing a "ULL" tag. There are a few places where compilation of vhdx
spawns warnings on 32bit hosts - I haven't checked all of them.
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c: In function
'vhdx_open':
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c:957: warning:
integer constant is too large for 'long' type
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c: In function
'vhdx_block_translate':
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c:1027: warning:
integer constant is too large for 'long' type
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c: In function
'vhdx_create_new_metadata':
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c:1455: warning:
integer constant is too large for 'long' type
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c: In function
'vhdx_create':
02/21 12:22:14 ERROR| utils:0144| [stderr] block/vhdx.c:1812: warning:
integer constant is too large for 'long' type
Alex
- Re: [Qemu-devel] [PULL v2 33/37] block: vhdx - add .bdrv_create() support,
Alexander Graf <=