summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2014-06-05 14:53:59 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2014-06-23 16:36:13 +0800
commit2bd3bce8efebe86b031beab5c0e3b9bbaec0b502 (patch)
treef0c9c33850b6e351afe75d315611bd2047cf6011 /docs
parent74892d2468b9f0c56b915ce94848d6f7fac39740 (diff)
downloadqemu-2bd3bce8efebe86b031beab5c0e3b9bbaec0b502.tar.gz
qemu-2bd3bce8efebe86b031beab5c0e3b9bbaec0b502.tar.bz2
qemu-2bd3bce8efebe86b031beab5c0e3b9bbaec0b502.zip
block: asynchronously stop the VM on I/O errors
With virtio-blk dataplane, I/O errors might occur while QEMU is not in the main I/O thread. However, it's invalid to call vm_stop when we're neither in a VCPU thread nor in the main I/O thread, even if we were to take the iothread mutex around it. To avoid this problem, we can raise a request to the main I/O thread, similar to what QEMU does when vm_stop is called from a CPU thread. We know that bdrv_error_action is called from an AIO callback, and the moment at which the callback will fire is not well-defined; it depends on the moment at which the disk or OS finishes the operation, which can happen at any time. Note that QEMU is certainly not in a CPU thread and we do not need to call cpu_stop_current() like vm_stop() does. However, we need to ensure that any action taken by management will result in correct detection of the error _and_ a running VM. In particular: - the event must be raised after the iostatus has been set, so that "info block" will return an iostatus that matches the event. - the VM must be stopped after the iostatus has been set, so that "info block" will return an iostatus that matches the runstate. The ordering between the STOP and BLOCK_IO_ERROR events is preserved; BLOCK_IO_ERROR is documented to come first. This makes bdrv_error_action() thread safe (assuming QMP events are, which is attacked by a separate series). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/qmp/qmp-events.txt2
1 files changed, 1 insertions, 1 deletions
diff --git a/docs/qmp/qmp-events.txt b/docs/qmp/qmp-events.txt
index 019db53ec8..22fea580a9 100644
--- a/docs/qmp/qmp-events.txt
+++ b/docs/qmp/qmp-events.txt
@@ -62,7 +62,7 @@ Data:
- "action": action that has been taken, it's one of the following (json-string):
"ignore": error has been ignored
"report": error has been reported to the device
- "stop": error caused VM to be stopped
+ "stop": the VM is going to stop because of the error
Example: