[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/12] block: vhdx - force FileOffsetMB field to '0'
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 11/12] block: vhdx - force FileOffsetMB field to '0' for certain block states |
Date: |
Fri, 23 Jan 2015 19:20:17 +0100 |
From: Jeff Cody <address@hidden>
The v1.0.0 spec calls out PAYLOAD_BLOCK_ZERO FileOffsetMB field as being
'reserved'. In practice, this means that Hyper-V will fail to read a
disk image with PAYLOAD_BLOCK_ZERO block states with a FileOffsetMB
value other than 0.
The other states that indicate a block that is not there
(PAYLOAD_BLOCK_UNDEFINED, PAYLOAD_BLOCK_NOT_PRESENT,
PAYLOAD_BLOCK_UNMAPPED) have multiple options for what FileOffsetMB may
be set to, and '0' is explicitly called out as an option.
For all the above states, we will also just set the FileOffsetMB value
to 0.
Signed-off-by: Jeff Cody <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Message-id: address@hidden
Signed-off-by: Max Reitz <address@hidden>
---
block/vhdx.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/block/vhdx.c b/block/vhdx.c
index 06f2b1a..bb3ed45 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -1174,7 +1174,18 @@ static void vhdx_update_bat_table_entry(BlockDriverState
*bs, BDRVVHDXState *s,
{
/* The BAT entry is a uint64, with 44 bits for the file offset in units of
* 1MB, and 3 bits for the block state. */
- s->bat[sinfo->bat_idx] = sinfo->file_offset;
+ if ((state == PAYLOAD_BLOCK_ZERO) ||
+ (state == PAYLOAD_BLOCK_UNDEFINED) ||
+ (state == PAYLOAD_BLOCK_NOT_PRESENT) ||
+ (state == PAYLOAD_BLOCK_UNMAPPED)) {
+ s->bat[sinfo->bat_idx] = 0; /* For PAYLOAD_BLOCK_ZERO, the
+ FileOffsetMB field is denoted as
+ 'reserved' in the v1.0 spec. If it is
+ non-zero, MS Hyper-V will fail to read
+ the disk image */
+ } else {
+ s->bat[sinfo->bat_idx] = sinfo->file_offset;
+ }
s->bat[sinfo->bat_idx] |= state & VHDX_BAT_STATE_BIT_MASK;
--
1.8.3.1
- [Qemu-devel] [PULL 00/12] Block patches, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 01/12] virtio-blk: Pass req to virtio_blk_handle_scsi_req, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 04/12] iotests: Add tests for more corruption cases, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 05/12] block: vmdk - make ret variable usage clear, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 02/12] virtio-blk: Use blk_aio_ioctl, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 06/12] block: vmdk - move string allocations from stack to the heap, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 03/12] qcow2: Add two more unalignment checks, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 08/12] block: remove unused variable in bdrv_commit, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 11/12] block: vhdx - force FileOffsetMB field to '0' for certain block states,
Kevin Wolf <=
- [Qemu-devel] [PULL 12/12] iotests: Lower 064's memory usage, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 09/12] block: mirror - change string allocation to 2-bytes, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 10/12] block: update string sizes for filename, backing_file, exact_filename, Kevin Wolf, 2015/01/23
- [Qemu-devel] [PULL 07/12] block: qapi - move string allocation from stack to the heap, Kevin Wolf, 2015/01/23
- Re: [Qemu-devel] [PULL 00/12] Block patches, Peter Maydell, 2015/01/26