All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 2/2] block: asynchronously stop the VM on I/O errors
Date: Thu, 19 Jun 2014 16:07:47 -0600	[thread overview]
Message-ID: <53A35F33.9070705@redhat.com> (raw)
In-Reply-To: <1401972839-25213-3-git-send-email-pbonzini@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1965 bytes --]

On 06/05/2014 06:53 AM, Paolo Bonzini wrote:
> 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>
> ---
>  block.c                 | 20 ++++++++++++++++++--
>  docs/qmp/qmp-events.txt |  2 +-
>  stubs/vm-stop.c         |  7 ++++++-
>  3 files changed, 25 insertions(+), 4 deletions(-)

This may need to be rebased, since events are now QAPI.

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

  reply	other threads:[~2014-06-19 22:08 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-05 12:53 [Qemu-devel] [PATCH v2 0/2] block: thread-safety patches for virtio-blk dataplane rerror/werror Paolo Bonzini
2014-06-05 12:53 ` [Qemu-devel] [PATCH v2 1/2] vl: allow other threads to do qemu_system_vmstop_request Paolo Bonzini
2014-06-19 22:18   ` Eric Blake
2014-06-05 12:53 ` [Qemu-devel] [PATCH v2 2/2] block: asynchronously stop the VM on I/O errors Paolo Bonzini
2014-06-19 22:07   ` Eric Blake [this message]
2014-06-20  3:58 ` [Qemu-devel] [PATCH v2 0/2] block: thread-safety patches for virtio-blk dataplane rerror/werror Stefan Hajnoczi
2014-06-20  6:04   ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53A35F33.9070705@redhat.com \
    --to=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.