[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH 1/1] qemu-iotests/109: Fix lock race condition
From: |
Jeff Cody |
Subject: |
Re: [Qemu-block] [PATCH 1/1] qemu-iotests/109: Fix lock race condition |
Date: |
Tue, 1 Aug 2017 17:54:37 -0400 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Tue, Aug 01, 2017 at 05:31:27PM -0400, Cleber Rosa wrote:
> A race condition is currently present between the clean up attempt of
> the QEMU process and the execution of qemu-img. The actual (bad)
> output is:
>
> -Warning: Image size mismatch!
> -Images are identical.
> +qemu-img: Could not open '<build_dir>/tests/qemu-iotests/scratch/t.raw':
> Failed to get "consistent read" lock
> +Is another process using the image?
>
> A KILL signal is sent to the QEMU process, but qemu-img may begin to
> run before the QEMU process is really gone. qemu-img will then
> attempt to open the TEST_IMG file before it can secure a lock on it.
>
> This attempts a more graceful shutdown, and waits for the QEMU process
> to exit.
>
> Signed-off-by: Cleber Rosa <address@hidden>
Reviewed-by: Jeff Cody <address@hidden>
> ---
> tests/qemu-iotests/109 | 3 ++-
> tests/qemu-iotests/109.out | 56
> ++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 58 insertions(+), 1 deletion(-)
>
> diff --git a/tests/qemu-iotests/109 b/tests/qemu-iotests/109
> index 3b496a3..d70b574 100755
> --- a/tests/qemu-iotests/109
> +++ b/tests/qemu-iotests/109
> @@ -67,7 +67,8 @@ function run_qemu()
> _send_qemu_cmd $QEMU_HANDLE '' "BLOCK_JOB_COMPLETED"
> fi
> _send_qemu_cmd $QEMU_HANDLE '{"execute":"query-block-jobs"}' "return"
> - _cleanup_qemu
> + _send_qemu_cmd $QEMU_HANDLE '{"execute":"quit"}' "return"
> + wait=1 _cleanup_qemu
> }
>
> for fmt in qcow qcow2 qed vdi vmdk vpc; do
> diff --git a/tests/qemu-iotests/109.out b/tests/qemu-iotests/109.out
> index dc02f9e..c189e28 100644
> --- a/tests/qemu-iotests/109.out
> +++ b/tests/qemu-iotests/109.out
> @@ -12,12 +12,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset": 0,
> "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 1024, "offset": 1024,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 1024,
> "offset": 1024, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 1024,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -33,12 +38,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset": 512,
> "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 197120, "offset": 197120,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len":
> 197120, "offset": 197120, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 197120, "offset":
> 197120, "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -54,12 +64,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset":
> 262144, "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 327680, "offset": 327680,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len":
> 327680, "offset": 327680, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset":
> 327680, "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -75,12 +90,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset": 0,
> "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 1024, "offset": 1024,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 1024,
> "offset": 1024, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 1024,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -96,12 +116,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset": 0,
> "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 65536, "offset": 65536,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len":
> 65536, "offset": 65536, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 65536, "offset":
> 65536, "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -117,12 +142,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset": 0,
> "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 2560, "offset": 2560,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 2560,
> "offset": 2560, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 2560,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -137,12 +167,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset":
> OFFSET, "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 2560, "offset": 2560,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 2560,
> "offset": 2560, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 2560,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -157,12 +192,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset":
> OFFSET, "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 31457280, "offset":
> 31457280, "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len":
> 31457280, "offset": 31457280, "paused": false, "speed": 0, "ready": true,
> "type": "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 31457280, "offset":
> 31457280, "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -177,12 +217,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset":
> OFFSET, "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 327680, "offset": 327680,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len":
> 327680, "offset": 327680, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset":
> 327680, "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -197,12 +242,17 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action":
> "report"}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": LEN, "offset":
> OFFSET, "speed": 0, "type": "mirror", "error": "Operation not permitted"}}
> {"return": []}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> read 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 2048, "offset": 2048,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 2048,
> "offset": 2048, "paused": false, "speed": 0, "ready": true, "type":
> "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2048, "offset": 2048,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
>
> @@ -216,12 +266,18 @@ Specify the 'raw' format explicitly to remove the
> restrictions.
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 512, "offset": 512,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 512,
> "offset": 512, "paused": false, "speed": 0, "ready": true, "type": "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 512, "offset": 512,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
> {"return": {}}
> {"return": {}}
> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_READY", "data": {"device": "src", "len": 512, "offset": 512,
> "speed": 0, "type": "mirror"}}
> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 512,
> "offset": 512, "paused": false, "speed": 0, "ready": true, "type": "mirror"}]}
> +{"return": {}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "SHUTDOWN", "data": {"guest": false}}
> +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event":
> "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 512, "offset": 512,
> "speed": 0, "type": "mirror"}}
> Warning: Image size mismatch!
> Images are identical.
> *** done
> --
> 2.9.4
>
>