[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [Qemu-devel] [PATCH v2] vmdk: fix cluster size check f
From: |
Fam Zheng |
Subject: |
Re: [Qemu-stable] [Qemu-devel] [PATCH v2] vmdk: fix cluster size check for flat extents |
Date: |
Thu, 26 Sep 2013 10:29:16 +0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Mon, 09/23 17:18, Fam Zheng wrote:
> We use the extent size as cluster size for flat extents (where no L1/L2
> table is allocated so it's safe) reuse sector calculating code with
> sparse extents.
>
> Don't pass in the cluster size for adding flat extent, just set it to
> sectors later, then the cluster size checking will not fail.
>
> The cluster_sectors is changed to int64_t to allow big flat extent.
>
> Without this, flat extent opening is broken:
>
> # qemu-img create -f vmdk -o subformat=monolithicFlat /tmp/a.vmdk 100G
> Formatting '/tmp/a.vmdk', fmt=vmdk size=107374182400 compat6=off
> subformat='monolithicFlat' zeroed_grain=off
> # qemu-img info /tmp/a.vmdk
> image: /tmp/a.vmdk
> file format: raw
> virtual size: 0 (0 bytes)
> disk size: 4.0K
>
> Signed-off-by: Fam Zheng <address@hidden>
> ---
> block/vmdk.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/block/vmdk.c b/block/vmdk.c
> index 96ef1b5..5d56e31 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -105,7 +105,7 @@ typedef struct VmdkExtent {
> uint32_t l2_cache_offsets[L2_CACHE_SIZE];
> uint32_t l2_cache_counts[L2_CACHE_SIZE];
>
> - unsigned int cluster_sectors;
> + int64_t cluster_sectors;
> } VmdkExtent;
>
> typedef struct BDRVVmdkState {
> @@ -424,7 +424,7 @@ static int vmdk_add_extent(BlockDriverState *bs,
> extent->l1_size = l1_size;
> extent->l1_entry_sectors = l2_size * cluster_sectors;
> extent->l2_size = l2_size;
> - extent->cluster_sectors = cluster_sectors;
> + extent->cluster_sectors = flat ? sectors : cluster_sectors;
>
> if (s->num_extents > 1) {
> extent->end_sector = (*(extent - 1)).end_sector + extent->sectors;
> @@ -741,7 +741,7 @@ static int vmdk_parse_extents(const char *desc,
> BlockDriverState *bs,
> VmdkExtent *extent;
>
> ret = vmdk_add_extent(bs, extent_file, true, sectors,
> - 0, 0, 0, 0, sectors, &extent);
> + 0, 0, 0, 0, 0, &extent);
> if (ret < 0) {
> return ret;
> }
> --
> 1.8.3.1
>
>
CC'ing qemu-stable as this applies to 1.6 as well.
Fam
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-stable] [Qemu-devel] [PATCH v2] vmdk: fix cluster size check for flat extents,
Fam Zheng <=