Skip to content

Commit

Permalink
Merge remote-tracking branch 'mreitz/block' into queue-block
Browse files Browse the repository at this point in the history
* mreitz/block:
  iotests: Lower 064's memory usage
  block: vhdx - force FileOffsetMB field to '0' for certain block states
  • Loading branch information
kevmw committed Jan 23, 2015
2 parents 9a29e18 + e35053b commit bc63781
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 7 deletions.
13 changes: 12 additions & 1 deletion block/vhdx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
19 changes: 17 additions & 2 deletions tests/qemu-iotests/064
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,15 @@ $QEMU_IO -r -c "read -pP 0x96 33M 33M" "$TEST_IMG" | _filter_qemu_io

echo
echo "=== Verify pattern 0x00, 66M - 1024M ==="
$QEMU_IO -r -c "read -pP 0x00 66M 958M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -r -c "read -pP 0x00 66M 62M" \
-c "read -pP 0x00 128M 128M" \
-c "read -pP 0x00 256M 128M" \
-c "read -pP 0x00 384M 128M" \
-c "read -pP 0x00 512M 128M" \
-c "read -pP 0x00 640M 128M" \
-c "read -pP 0x00 768M 128M" \
-c "read -pP 0x00 896M 128M" \
"$TEST_IMG" | _filter_qemu_io

echo
echo "=== Verify pattern write, 0xc3 99M-157M ==="
Expand All @@ -63,7 +71,14 @@ $QEMU_IO -c "write -pP 0xc3 99M 58M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -pP 0xa5 0 33M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -pP 0x96 33M 33M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -pP 0x00 66M 33M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -pP 0x00 157MM 867MM" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -pP 0x00 157M 99M" \
-c "read -pP 0x00 256M 128M" \
-c "read -pP 0x00 384M 128M" \
-c "read -pP 0x00 512M 128M" \
-c "read -pP 0x00 640M 128M" \
-c "read -pP 0x00 768M 128M" \
-c "read -pP 0x00 896M 128M" \
"$TEST_IMG" | _filter_qemu_io
# now verify what we should have actually written
$QEMU_IO -c "read -pP 0xc3 99M 58M" "$TEST_IMG" | _filter_qemu_io

Expand Down
34 changes: 30 additions & 4 deletions tests/qemu-iotests/064.out
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,22 @@ read 34603008/34603008 bytes at offset 34603008
33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)

=== Verify pattern 0x00, 66M - 1024M ===
read 1004535808/1004535808 bytes at offset 69206016
958 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65011712/65011712 bytes at offset 69206016
62 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 134217728
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 268435456
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 402653184
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 536870912
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 671088640
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 805306368
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 939524096
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)

=== Verify pattern write, 0xc3 99M-157M ===
wrote 60817408/60817408 bytes at offset 103809024
Expand All @@ -21,8 +35,20 @@ read 34603008/34603008 bytes at offset 34603008
33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 34603008/34603008 bytes at offset 69206016
33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 909115392/909115392 bytes at offset 164626432
867 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 103809024/103809024 bytes at offset 164626432
99 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 268435456
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 402653184
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 536870912
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 671088640
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 805306368
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 134217728/134217728 bytes at offset 939524096
128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 60817408/60817408 bytes at offset 103809024
58 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
*** done

0 comments on commit bc63781

Please sign in to comment.