Commit bc63781c authored by Kevin Wolf's avatar Kevin Wolf
Browse files

Merge remote-tracking branch 'mreitz/block' into queue-block

* mreitz/block:
  iotests: Lower 064's memory usage
  block: vhdx - force FileOffsetMB field to '0' for certain block states
parents 9a29e18f e35053b2
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -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. */
    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;

+17 −2
Original line number Diff line number Diff line
@@ -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 ==="
@@ -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

+30 −4
Original line number Diff line number Diff line
@@ -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
@@ -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