Paolo Bonzini 2bd3bce8ef 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>
2014-06-23 16:36:13 +08:00
2013-04-18 13:50:53 +02:00
2014-06-16 13:24:35 +02:00
2014-06-19 18:44:22 +03:00
2014-06-16 13:24:35 +02:00
2014-06-16 13:24:41 +02:00
2014-06-05 16:10:33 +02:00
2014-06-10 09:50:27 +02:00
2014-06-05 16:10:33 +02:00
2014-06-19 18:44:22 +03:00
2012-09-07 09:02:44 +03:00
2014-06-16 13:24:35 +02:00
2013-09-05 09:40:31 -05:00
2014-06-09 15:43:40 +02:00
2013-10-11 09:34:56 -07:00
2014-06-05 16:10:33 +02:00
2013-07-23 02:41:31 +02:00
2014-06-19 18:44:21 +03:00
2014-06-19 18:44:21 +03:00
2014-06-19 16:41:54 +03:00
2013-08-12 09:15:12 -05:00
2014-06-09 15:43:40 +02:00
2013-09-03 12:25:55 +02:00
2014-05-24 00:07:29 +04:00
2014-03-13 14:34:16 +00:00
2014-05-28 17:36:21 +02:00
2014-04-18 10:33:36 +04:00
2014-06-16 17:23:21 +08:00
2014-06-09 15:43:40 +02:00
2014-05-28 14:28:46 +02:00
2014-05-24 00:07:29 +04:00
2014-06-19 18:44:22 +03:00
2013-10-11 09:34:56 -07:00
2014-02-17 11:57:23 -05:00
2014-06-05 16:10:33 +02:00
2014-04-17 20:39:32 +01:00
2013-10-11 09:34:56 -07:00
2014-05-07 16:16:43 +00:00
2014-06-11 00:25:06 +01:00
2013-04-08 18:13:10 +02:00

Read the documentation in qemu-doc.html or on http://wiki.qemu-project.org

- QEMU team
S
Description
Languages
C 82.6%
C++ 6.5%
Python 3.3%
Dylan 2.9%
Shell 1.6%
Other 2.9%