qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

iotests/109: Don't mirror with mismatched size

This patch makes the raw image the same size as the file in a different
format that is mirrored as raw to it to avoid errors when mirror starts
to enforce that source and target are the same size.

We check only that the first 512 bytes are zeroed (instead of 64k)
because some image formats create image files that are smaller than 64k,
so trying to read 64k would result in I/O errors. Apart from this, 512
is more appropriate anyway because the raw format driver protects
specifically the first 512 bytes.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20200511135825.219437-2-kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>

+41 -48
+5 -5
tests/qemu-iotests/109
··· 77 77 echo "=== Writing a $fmt header into raw ===" 78 78 echo 79 79 80 - _make_test_img 64M 81 80 TEST_IMG="$TEST_IMG.src" IMGFMT=$fmt _make_test_img 64M 81 + _make_test_img $(du -b "$TEST_IMG.src" | cut -f1) | _filter_img_create_size 82 82 83 83 # This first test should fail: The image format was probed, we may not 84 84 # write an image header at the start of the image 85 85 run_qemu "$TEST_IMG" "$TEST_IMG.src" "" "BLOCK_JOB_ERROR" | 86 86 _filter_block_job_len 87 - $QEMU_IO -c 'read -P 0 0 64k' "$TEST_IMG" | _filter_qemu_io 87 + $QEMU_IO -c 'read -P 0 0 512' "$TEST_IMG" | _filter_qemu_io 88 88 89 89 90 90 # When raw was explicitly specified, the same must succeed ··· 103 103 104 104 # Can't use _use_sample_img because that isn't designed to be used multiple 105 105 # times and it overwrites $TEST_IMG (both breaks cleanup) 106 - _make_test_img 64M 107 106 bzcat "$SAMPLE_IMG_DIR/$sample_img.bz2" > "$TEST_IMG.src" 107 + _make_test_img $(du -b "$TEST_IMG.src" | cut -f1) | _filter_img_create_size 108 108 109 109 run_qemu "$TEST_IMG" "$TEST_IMG.src" "" "BLOCK_JOB_ERROR" | 110 110 _filter_block_job_offset | _filter_block_job_len 111 - $QEMU_IO -c 'read -P 0 0 64k' "$TEST_IMG" | _filter_qemu_io 111 + $QEMU_IO -c 'read -P 0 0 512' "$TEST_IMG" | _filter_qemu_io 112 112 113 113 run_qemu "$TEST_IMG" "$TEST_IMG.src" "'format': 'raw'," "BLOCK_JOB_READY" 114 114 $QEMU_IMG compare -f raw -F raw "$TEST_IMG" "$TEST_IMG.src" ··· 119 119 echo 120 120 121 121 for sample_img in grub_mbr.raw; do 122 - _make_test_img 64M 123 122 bzcat "$SAMPLE_IMG_DIR/$sample_img.bz2" > "$TEST_IMG.src" 123 + _make_test_img $(du -b "$TEST_IMG.src" | cut -f1) | _filter_img_create_size 124 124 125 125 run_qemu "$TEST_IMG" "$TEST_IMG.src" "" "BLOCK_JOB_READY" 126 126 $QEMU_IMG compare -f raw -F raw "$TEST_IMG" "$TEST_IMG.src"
+31 -43
tests/qemu-iotests/109.out
··· 2 2 3 3 === Writing a qcow header into raw === 4 4 5 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 6 5 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 6 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 7 7 { 'execute': 'qmp_capabilities' } 8 8 {"return": {}} 9 9 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 23 23 {"execute":"quit"} 24 24 {"return": {}} 25 25 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 26 - read 65536/65536 bytes at offset 0 27 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 26 + read 512/512 bytes at offset 0 27 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 28 28 { 'execute': 'qmp_capabilities' } 29 29 {"return": {}} 30 30 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 43 43 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 1024, "speed": 0, "type": "mirror"}} 44 44 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 45 45 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 46 - Warning: Image size mismatch! 47 46 Images are identical. 48 47 49 48 === Writing a qcow2 header into raw === 50 49 51 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 52 50 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 51 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 53 52 { 'execute': 'qmp_capabilities' } 54 53 {"return": {}} 55 54 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 69 68 {"execute":"quit"} 70 69 {"return": {}} 71 70 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 72 - read 65536/65536 bytes at offset 0 73 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 71 + read 512/512 bytes at offset 0 72 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 74 73 { 'execute': 'qmp_capabilities' } 75 74 {"return": {}} 76 75 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 89 88 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 197120, "offset": 197120, "speed": 0, "type": "mirror"}} 90 89 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 91 90 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 92 - Warning: Image size mismatch! 93 91 Images are identical. 94 92 95 93 === Writing a qed header into raw === 96 94 97 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 98 95 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 96 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 99 97 { 'execute': 'qmp_capabilities' } 100 98 {"return": {}} 101 99 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 115 113 {"execute":"quit"} 116 114 {"return": {}} 117 115 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 118 - read 65536/65536 bytes at offset 0 119 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 116 + read 512/512 bytes at offset 0 117 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 120 118 { 'execute': 'qmp_capabilities' } 121 119 {"return": {}} 122 120 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 135 133 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset": 327680, "speed": 0, "type": "mirror"}} 136 134 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 137 135 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 138 - Warning: Image size mismatch! 139 136 Images are identical. 140 137 141 138 === Writing a vdi header into raw === 142 139 143 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 144 140 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 141 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 145 142 { 'execute': 'qmp_capabilities' } 146 143 {"return": {}} 147 144 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 161 158 {"execute":"quit"} 162 159 {"return": {}} 163 160 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 164 - read 65536/65536 bytes at offset 0 165 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 161 + read 512/512 bytes at offset 0 162 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 166 163 { 'execute': 'qmp_capabilities' } 167 164 {"return": {}} 168 165 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 181 178 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 1024, "speed": 0, "type": "mirror"}} 182 179 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 183 180 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 184 - Warning: Image size mismatch! 185 181 Images are identical. 186 182 187 183 === Writing a vmdk header into raw === 188 184 189 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 190 185 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 186 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 191 187 { 'execute': 'qmp_capabilities' } 192 188 {"return": {}} 193 189 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 207 203 {"execute":"quit"} 208 204 {"return": {}} 209 205 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 210 - read 65536/65536 bytes at offset 0 211 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 206 + read 512/512 bytes at offset 0 207 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 212 208 { 'execute': 'qmp_capabilities' } 213 209 {"return": {}} 214 210 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 227 223 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 65536, "offset": 65536, "speed": 0, "type": "mirror"}} 228 224 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 229 225 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 230 - Warning: Image size mismatch! 231 226 Images are identical. 232 227 233 228 === Writing a vpc header into raw === 234 229 235 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 236 230 Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 231 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 237 232 { 'execute': 'qmp_capabilities' } 238 233 {"return": {}} 239 234 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 253 248 {"execute":"quit"} 254 249 {"return": {}} 255 250 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 256 - read 65536/65536 bytes at offset 0 257 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 251 + read 512/512 bytes at offset 0 252 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 258 253 { 'execute': 'qmp_capabilities' } 259 254 {"return": {}} 260 255 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 273 268 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 2560, "speed": 0, "type": "mirror"}} 274 269 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 275 270 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 276 - Warning: Image size mismatch! 277 271 Images are identical. 278 272 279 273 === Copying sample image empty.bochs into raw === 280 274 281 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 275 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 282 276 { 'execute': 'qmp_capabilities' } 283 277 {"return": {}} 284 278 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 298 292 {"execute":"quit"} 299 293 {"return": {}} 300 294 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 301 - read 65536/65536 bytes at offset 0 302 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 295 + read 512/512 bytes at offset 0 296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 303 297 { 'execute': 'qmp_capabilities' } 304 298 {"return": {}} 305 299 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 318 312 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 2560, "speed": 0, "type": "mirror"}} 319 313 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 320 314 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 321 - Warning: Image size mismatch! 322 315 Images are identical. 323 316 324 317 === Copying sample image iotest-dirtylog-10G-4M.vhdx into raw === 325 318 326 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 319 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 327 320 { 'execute': 'qmp_capabilities' } 328 321 {"return": {}} 329 322 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 343 336 {"execute":"quit"} 344 337 {"return": {}} 345 338 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 346 - read 65536/65536 bytes at offset 0 347 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 339 + read 512/512 bytes at offset 0 340 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 348 341 { 'execute': 'qmp_capabilities' } 349 342 {"return": {}} 350 343 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 363 356 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 31457280, "offset": 31457280, "speed": 0, "type": "mirror"}} 364 357 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 365 358 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 366 - Warning: Image size mismatch! 367 359 Images are identical. 368 360 369 361 === Copying sample image parallels-v1 into raw === 370 362 371 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 363 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 372 364 { 'execute': 'qmp_capabilities' } 373 365 {"return": {}} 374 366 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 388 380 {"execute":"quit"} 389 381 {"return": {}} 390 382 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 391 - read 65536/65536 bytes at offset 0 392 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 383 + read 512/512 bytes at offset 0 384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 393 385 { 'execute': 'qmp_capabilities' } 394 386 {"return": {}} 395 387 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 408 400 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset": 327680, "speed": 0, "type": "mirror"}} 409 401 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 410 402 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 411 - Warning: Image size mismatch! 412 403 Images are identical. 413 404 414 405 === Copying sample image simple-pattern.cloop into raw === 415 406 416 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 407 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 417 408 { 'execute': 'qmp_capabilities' } 418 409 {"return": {}} 419 410 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 433 424 {"execute":"quit"} 434 425 {"return": {}} 435 426 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 436 - read 65536/65536 bytes at offset 0 437 - 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 427 + read 512/512 bytes at offset 0 428 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 438 429 { 'execute': 'qmp_capabilities' } 439 430 {"return": {}} 440 431 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'format': 'IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 453 444 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2048, "offset": 2048, "speed": 0, "type": "mirror"}} 454 445 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 455 446 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 456 - Warning: Image size mismatch! 457 447 Images are identical. 458 448 459 449 === Write legitimate MBR into raw === 460 450 461 - Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 451 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE 462 452 { 'execute': 'qmp_capabilities' } 463 453 {"return": {}} 464 454 {'execute':'drive-mirror', 'arguments':{ 'device': 'src', 'target': 'TEST_DIR/t.IMGFMT', 'mode': 'existing', 'sync': 'full'}} ··· 480 470 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 512, "offset": 512, "speed": 0, "type": "mirror"}} 481 471 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 482 472 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 483 - Warning: Image size mismatch! 484 473 Images are identical. 485 474 { 'execute': 'qmp_capabilities' } 486 475 {"return": {}} ··· 500 489 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 512, "offset": 512, "speed": 0, "type": "mirror"}} 501 490 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "src"}} 502 491 {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "src"}} 503 - Warning: Image size mismatch! 504 492 Images are identical. 505 493 *** done
+5
tests/qemu-iotests/common.filter
··· 156 156 -e "s# compression_type=[a-zA-Z0-9]\\+##g" 157 157 } 158 158 159 + _filter_img_create_size() 160 + { 161 + $SED -e "s# size=[0-9]\\+# size=SIZE#g" 162 + } 163 + 159 164 _filter_img_info() 160 165 { 161 166 if [[ "$1" == "--format-specific" ]]; then