mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	 d04c155503
			
		
	
	
		d04c155503
		
	
	
	
	
		
			
			In the "Overlapping multiple requests" cases, the 3rd reqs (the break
point B) doesn't wait for the 2nd, and once resumed the I/O will just
continue.  This is because the 2nd is already waiting for the 1st, and
in wait_serialising_requests() there is:
    /* If the request is already (indirectly) waiting for us, or
     * will wait for us as soon as it wakes up, then just go on
     * (instead of producing a deadlock in the former case). */
    if (!req->waiting_for) {
        /* actually break */
        ...
    }
Consequently, the following "sleep 100; resume A" command races with the
completion of that request, and sometimes results in an unexpected
order of output:
> @@ -56,9 +56,9 @@
>  wrote XXX/XXX bytes at offset XXX
>  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  blkdebug: Resuming request 'B'
> +blkdebug: Resuming request 'A'
>  wrote XXX/XXX bytes at offset XXX
>  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -blkdebug: Resuming request 'A'
>  wrote XXX/XXX bytes at offset XXX
>  XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  wrote XXX/XXX bytes at offset XXX
Filter out the "Resuming request" lines to make the output
deterministic.
Reported-by: Patchew <no-reply@patchew.org>
Signed-off-by: Fam Zheng <famz@redhat.com>
Message-id: 20171113150026.4743-1-famz@redhat.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
		
	
			
		
			
				
	
	
		
			161 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| QA output created by 077
 | |
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 | |
| 
 | |
| == Some concurrent requests involving RMW ==
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| wrote XXX/XXX bytes at offset XXX
 | |
| XXX bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| 
 | |
| == Verify image content ==
 | |
| read 512/512 bytes at offset 0
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 512
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 3072/3072 bytes at offset 1024
 | |
| 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 4096
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 4608
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 5120
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 2560/2560 bytes at offset 5632
 | |
| 2.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 8192
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 8704
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 9216
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 2560/2560 bytes at offset 9728
 | |
| 2.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 20480
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 20992
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 21504
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 22016
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 22528
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 23040
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 23552
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 24064
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 24576
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 25088
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 4096/4096 bytes at offset 26624
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 30720
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 32256
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 32768
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 33280
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 4096/4096 bytes at offset 34816
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 38912
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 40448
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 40960
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 41472
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 4096/4096 bytes at offset 43008
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 47104
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 48640
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 49152
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 49664
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 4096/4096 bytes at offset 51200
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1536/1536 bytes at offset 55296
 | |
| 1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 512/512 bytes at offset 56832
 | |
| 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 4096/4096 bytes at offset 57344
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1024/1024 bytes at offset 63488
 | |
| 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1024/1024 bytes at offset 64512
 | |
| 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1024/1024 bytes at offset 65536
 | |
| 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 1024/1024 bytes at offset 66560
 | |
| 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| read 2048/2048 bytes at offset 71680
 | |
| 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| No errors were found on the image.
 | |
| *** done
 |