When passing -S 0 to qemu-img convert, the target image is supposed to be fully allocated. Right now, this is not the case if the source image contains areas which bdrv_get_block_status() reports as being zero. This patch changes a zeroed area's status from BLK_ZERO to BLK_DATA before invoking convert_write() if -S 0 has been specified. In addition, the check whether convert_read() actually needs to do anything (basically only if the current area is a BLK_DATA area) is pulled out of that function to the caller. If -S 0 has been specified, zeroed areas need to be written as data to the output, thus they then have to be accounted when calculating the progress made. This patch changes the reference output for iotest 122; contrary to what it assumed, -S 0 really should allocate everything in the output, not just areas that are filled with zeros (as opposed to being zeroed). Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
208 lines
9.9 KiB
Plaintext
208 lines
9.9 KiB
Plaintext
QA output created by 122
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
|
wrote 67108864/67108864 bytes at offset 0
|
|
64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
=== Check allocation status regression with -B ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
|
wrote 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Offset Length File
|
|
0 0x300000 TEST_DIR/t.IMGFMT.orig
|
|
0x300000 0x3d00000 TEST_DIR/t.IMGFMT.base
|
|
|
|
=== Check that zero clusters are kept in overlay ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
|
wrote 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
=== Concatenate multiple source images ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.1', fmt=IMGFMT size=4194304
|
|
Formatting 'TEST_DIR/t.IMGFMT.2', fmt=IMGFMT size=4194304
|
|
Formatting 'TEST_DIR/t.IMGFMT.3', fmt=IMGFMT size=4194304
|
|
wrote 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Offset Length File
|
|
0 0x10000 TEST_DIR/t.IMGFMT
|
|
0x400000 0x10000 TEST_DIR/t.IMGFMT
|
|
0x800000 0x10000 TEST_DIR/t.IMGFMT
|
|
read 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 4194304
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 8388608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 65536, "length": 4128768, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 4194304, "length": 65536, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 4259840, "length": 4128768, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 8388608, "length": 65536, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 8454144, "length": 4128768, "depth": 0, "zero": true, "data": false}]
|
|
read 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 4194304
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 65536/65536 bytes at offset 8388608
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
qemu-img: -B makes no sense when concatenating multiple input images
|
|
qemu-img: -B makes no sense when concatenating multiple input images
|
|
|
|
=== Compression with misaligned allocations and image sizes ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT.1', fmt=IMGFMT size=1047552
|
|
Formatting 'TEST_DIR/t.IMGFMT.2', fmt=IMGFMT size=1047552
|
|
wrote 16384/16384 bytes at offset 16384
|
|
16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 133120/133120 bytes at offset 133120
|
|
130 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 1046528
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 0
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 65536, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 65536, "length": 65536, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 131072, "length": 196608, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 327680, "length": 655360, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 1048576, "length": 1046528, "depth": 0, "zero": true, "data": false}]
|
|
read 16384/16384 bytes at offset 0
|
|
16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 16384/16384 bytes at offset 16384
|
|
16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 100352/100352 bytes at offset 32768
|
|
98 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 133120/133120 bytes at offset 133120
|
|
130 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 780288/780288 bytes at offset 266240
|
|
762 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 1046528
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 1047552
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1046528/1046528 bytes at offset 1048576
|
|
1022 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
=== Full allocation with -S 0 ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
wrote 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 3145728/3145728 bytes at offset 3145728
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
convert -S 0:
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 63963136/63963136 bytes at offset 3145728
|
|
61 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true, "offset": 327680}]
|
|
|
|
convert -c -S 0:
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 63963136/63963136 bytes at offset 3145728
|
|
61 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true}]
|
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
|
wrote 33554432/33554432 bytes at offset 0
|
|
32 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
|
wrote 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
convert -S 0 with source backing file:
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 30408704/30408704 bytes at offset 3145728
|
|
29 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 33554432/33554432 bytes at offset 33554432
|
|
32 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true, "offset": 327680}]
|
|
|
|
convert -c -S 0 with source backing file:
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 30408704/30408704 bytes at offset 3145728
|
|
29 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 33554432/33554432 bytes at offset 33554432
|
|
32 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true}]
|
|
|
|
convert -S 0 -B ...
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 30408704/30408704 bytes at offset 3145728
|
|
29 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 33554432/33554432 bytes at offset 33554432
|
|
32 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true, "offset": 327680}]
|
|
|
|
convert -c -S 0 -B ...
|
|
read 3145728/3145728 bytes at offset 0
|
|
3 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 30408704/30408704 bytes at offset 3145728
|
|
29 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 33554432/33554432 bytes at offset 33554432
|
|
32 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
[{ "start": 0, "length": 67108864, "depth": 0, "zero": false, "data": true}]
|
|
|
|
=== Non-zero -S ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
|
wrote 65536/65536 bytes at offset 0
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 0
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 8192
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
wrote 1024/1024 bytes at offset 17408
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
convert -S 4k
|
|
[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": 8192},
|
|
{ "start": 1024, "length": 7168, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 8192, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": 9216},
|
|
{ "start": 9216, "length": 8192, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 17408, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": 10240},
|
|
{ "start": 18432, "length": 67090432, "depth": 0, "zero": true, "data": false}]
|
|
|
|
convert -c -S 4k
|
|
[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 1024, "length": 7168, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 8192, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 9216, "length": 8192, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 17408, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 18432, "length": 67090432, "depth": 0, "zero": true, "data": false}]
|
|
|
|
convert -S 8k
|
|
[{ "start": 0, "length": 9216, "depth": 0, "zero": false, "data": true, "offset": 8192},
|
|
{ "start": 9216, "length": 8192, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 17408, "length": 1024, "depth": 0, "zero": false, "data": true, "offset": 17408},
|
|
{ "start": 18432, "length": 67090432, "depth": 0, "zero": true, "data": false}]
|
|
|
|
convert -c -S 8k
|
|
[{ "start": 0, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 1024, "length": 7168, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 8192, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 9216, "length": 8192, "depth": 0, "zero": true, "data": false},
|
|
{ "start": 17408, "length": 1024, "depth": 0, "zero": false, "data": true},
|
|
{ "start": 18432, "length": 67090432, "depth": 0, "zero": true, "data": false}]
|
|
*** done
|