qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]