[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.8 v2] qcow2: Don't strand clusters near 2G
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH for-2.8 v2] qcow2: Don't strand clusters near 2G intervals during commit |
Date: |
Mon, 5 Dec 2016 14:52:56 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 |
On 12/05/2016 10:49 AM, Eric Blake wrote:
> The qcow2_make_empty() function is reached during 'qemu-img commit',
> in order to clear out ALL clusters of an image. However, if the
> image cannot use the fast code path (true if the image is format
> 0.10, or if the image contains a snapshot), the cluster size is
> larger than 512, and the image is larger than 2G in size, then our
> choice of sector_step causes problems. Since it is not cluster
> aligned, but qcow2_discard_clusters() silently ignores an unaligned
> head or tail, we are leaving clusters allocated.
>
> Enhance the testsuite to expose the flaw, and patch the problem by
> ensuring our step size is aligned.
>
> Signed-off-by: Eric Blake <address@hidden>
>
> ---
> v2: perform rounding correctly
> ---
> block/qcow2.c | 3 +-
> tests/qemu-iotests/097 | 41 +++++---
> tests/qemu-iotests/097.out | 249
> +++++++++++++++++++++++++++++++++------------
> 3 files changed, 210 insertions(+), 83 deletions(-)
>
> diff --git a/block/qcow2.c b/block/qcow2.c
> index ed9e0f3..96fb8a8 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -2808,7 +2808,8 @@ static int qcow2_make_empty(BlockDriverState *bs)
> {
> BDRVQcow2State *s = bs->opaque;
> uint64_t start_sector;
> - int sector_step = INT_MAX / BDRV_SECTOR_SIZE;
> + int sector_step = (QEMU_ALIGN_DOWN(INT_MAX, s->cluster_size) /
> + BDRV_SECTOR_SIZE);
> int l1_clusters, ret = 0;
>
> l1_clusters = DIV_ROUND_UP(s->l1_size, s->cluster_size /
> sizeof(uint64_t));
> diff --git a/tests/qemu-iotests/097 b/tests/qemu-iotests/097
> index 01d8dd0..4c33e80 100755
> --- a/tests/qemu-iotests/097
> +++ b/tests/qemu-iotests/097
> @@ -46,7 +46,7 @@ _supported_proto file
> _supported_os Linux
>
>
> -# Four passes:
> +# Four main passes:
> # 0: Two-layer backing chain, commit to upper backing file (implicitly)
> # (in this case, the top image will be emptied)
> # 1: Two-layer backing chain, commit to upper backing file (explicitly)
> @@ -56,22 +56,30 @@ _supported_os Linux
> # 3: Two-layer backing chain, commit to lower backing file
> # (in this case, the top image will implicitly stay unchanged)
> #
> +# Each pass is run twice, since qcow2 has different code paths for cleaning
> +# an image depending on whether it has a snapshot.
> +#
> # 020 already tests committing, so this only tests whether image chains are
> # working properly and that all images above the base are emptied; therefore,
> -# no complicated patterns are necessary
> +# no complicated patterns are necessary. Check near the 2G mark, as qcow2
> +# has been buggy at that boundary in the past.
> for i in 0 1 2 3; do
> +for j in 0 1; do
>
> echo
> -echo "=== Test pass $i ==="
> +echo "=== Test pass $i.$j ==="
> echo
>
> -TEST_IMG="$TEST_IMG.base" _make_test_img 64M
> -TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 64M
> -_make_test_img -b "$TEST_IMG.itmd" 64M
> +TEST_IMG="$TEST_IMG.base" _make_test_img 2100M
> +TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 2100M
> +_make_test_img -b "$TEST_IMG.itmd" 2100M
> +if [ $j -eq 0 ]; then
> + $QEMU_IMG snapshot -c snap "$TEST_IMG"
> +fi
>
> -$QEMU_IO -c 'write -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
> -$QEMU_IO -c 'write -P 2 64k 128k' "$TEST_IMG.itmd" | _filter_qemu_io
> -$QEMU_IO -c 'write -P 3 128k 64k' "$TEST_IMG" | _filter_qemu_io
> +$QEMU_IO -c 'write -P 1 0x7ffd0000 192k' "$TEST_IMG.base" | _filter_qemu_io
> +$QEMU_IO -c 'write -P 2 0x7ffe0000 128k' "$TEST_IMG.itmd" | _filter_qemu_io
> +$QEMU_IO -c 'write -P 3 0x7fff0000 64k' "$TEST_IMG" | _filter_qemu_io
>
> if [ $i -lt 3 ]; then
> if [ $i == 0 ]; then
> @@ -88,12 +96,12 @@ if [ $i -lt 3 ]; then
> fi
>
> # Bottom should be unchanged
> - $QEMU_IO -c 'read -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 1 0x7ffd0000 192k' "$TEST_IMG.base" |
> _filter_qemu_io
>
> # Intermediate should contain changes from top
> - $QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.itmd" | _filter_qemu_io
> - $QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
> - $QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
>
> # And in pass 0, the top image should be empty, whereas in both other
> passes
> # it should be unchanged (which is both checked by qemu-img map)
> @@ -101,9 +109,9 @@ else
> $QEMU_IMG commit -b "$TEST_IMG.base" "$TEST_IMG"
>
> # Bottom should contain all changes
> - $QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.base" | _filter_qemu_io
> - $QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.base" | _filter_qemu_io
> - $QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.base" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.base" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.base" | _filter_qemu_io
> + $QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.base" | _filter_qemu_io
>
> # Both top and intermediate should be unchanged
> fi
> @@ -113,6 +121,7 @@ $QEMU_IMG map "$TEST_IMG.itmd" | _filter_qemu_img_map
> $QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map
>
> done
> +done
>
>
> # success, all done
> diff --git a/tests/qemu-iotests/097.out b/tests/qemu-iotests/097.out
> index 48abd2e..8106cc9 100644
> --- a/tests/qemu-iotests/097.out
> +++ b/tests/qemu-iotests/097.out
> @@ -1,119 +1,236 @@
> QA output created by 097
>
> -=== Test pass 0 ===
> +=== Test pass 0.0 ===
>
> -Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
> -Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.base
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.itmd
> -wrote 196608/196608 bytes at offset 0
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 131072/131072 bytes at offset 65536
> +wrote 131072/131072 bytes at offset 2147352576
> 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 65536/65536 bytes at offset 131072
> +wrote 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Image committed.
> -read 196608/196608 bytes at offset 0
> +read 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 0
> +read 65536/65536 bytes at offset 2147287040
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 65536
> +read 65536/65536 bytes at offset 2147352576
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 131072
> +read 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Offset Length File
> -0 0x30000 TEST_DIR/t.IMGFMT.base
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
>
> -=== Test pass 1 ===
> +=== Test pass 0.1 ===
>
> -Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
> -Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.base
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.itmd
> -wrote 196608/196608 bytes at offset 0
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 131072/131072 bytes at offset 65536
> +wrote 131072/131072 bytes at offset 2147352576
> 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 65536/65536 bytes at offset 131072
> +wrote 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Image committed.
> -read 196608/196608 bytes at offset 0
> +read 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 0
> +read 65536/65536 bytes at offset 2147287040
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 65536
> +read 65536/65536 bytes at offset 2147352576
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 131072
> +read 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Offset Length File
> -0 0x30000 TEST_DIR/t.IMGFMT.base
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
> -0x20000 0x10000 TEST_DIR/t.IMGFMT
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
>
> -=== Test pass 2 ===
> +=== Test pass 1.0 ===
>
> -Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
> -Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.base
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.itmd
> -wrote 196608/196608 bytes at offset 0
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 131072/131072 bytes at offset 65536
> +wrote 131072/131072 bytes at offset 2147352576
> 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 65536/65536 bytes at offset 131072
> +wrote 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Image committed.
> -read 196608/196608 bytes at offset 0
> +read 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 0
> +read 65536/65536 bytes at offset 2147287040
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 65536
> +read 65536/65536 bytes at offset 2147352576
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 131072
> +read 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Offset Length File
> -0 0x30000 TEST_DIR/t.IMGFMT.base
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
> -0x20000 0x10000 TEST_DIR/t.IMGFMT
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
>
> -=== Test pass 3 ===
> +=== Test pass 1.1 ===
>
> -Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
> -Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.base
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> backing_file=TEST_DIR/t.IMGFMT.itmd
> -wrote 196608/196608 bytes at offset 0
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 131072/131072 bytes at offset 65536
> +wrote 131072/131072 bytes at offset 2147352576
> 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -wrote 65536/65536 bytes at offset 131072
> +wrote 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Image committed.
> -read 65536/65536 bytes at offset 0
> +read 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147287040
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147352576
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Offset Length File
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
> +
> +=== Test pass 2.0 ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 131072/131072 bytes at offset 2147352576
> +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Image committed.
> +read 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147287040
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147352576
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Offset Length File
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
> +
> +=== Test pass 2.1 ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 131072/131072 bytes at offset 2147352576
> +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Image committed.
> +read 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147287040
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147352576
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Offset Length File
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
> +
> +=== Test pass 3.0 ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 131072/131072 bytes at offset 2147352576
> +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Image committed.
> +read 65536/65536 bytes at offset 2147287040
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147352576
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Offset Length File
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +Offset Length File
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
> +
> +=== Test pass 3.1 ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
> +Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.base
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600
> backing_file=TEST_DIR/t.IMGFMT.itmd
> +wrote 196608/196608 bytes at offset 2147287040
> +192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 131072/131072 bytes at offset 2147352576
> +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 65536/65536 bytes at offset 2147418112
> +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +Image committed.
> +read 65536/65536 bytes at offset 2147287040
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 65536
> +read 65536/65536 bytes at offset 2147352576
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -read 65536/65536 bytes at offset 131072
> +read 65536/65536 bytes at offset 2147418112
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Offset Length File
> -0 0x30000 TEST_DIR/t.IMGFMT.base
> +0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
> Offset Length File
> -0 0x10000 TEST_DIR/t.IMGFMT.base
> -0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
> -0x20000 0x10000 TEST_DIR/t.IMGFMT
> +0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
> +0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
> +0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
> *** done
>
I skimmed the test changes, but it looks good.
Reviewed-by: John Snow <address@hidden>