On 05/27/2015 01:19 AM, Fam Zheng wrote:
> Currently the host notifier is checked by all aio_poll, which is not
> safe. For example, in a qmp transaction that takes snapshots or starts
> drive-backup on multiple dataplane disks, the atomicity could be broken:
> There could be one or more bdrv_drain_all() calls in each transaction
> opeartion, which will unconditinally calls one or more aio_poll on the

s/opeartion/operation/
s/unconditinally calls/unconditionally call/

> AioContext:
> 
>     qmp transaction
>         backup A prepare
>             ...
>             bdrv_drain_all()
>                 aio_poll(A)
>                 aio_poll(B)
>                 aio_poll(C)
>                 ...
>             ...
>         backup B prepare
>             ...
>             bdrv_drain_all()
>                 aio_poll(A)
>                 aio_poll(B)
> ->              aio_poll(C)
>             ...
>         snapshot C prepare
>             ...
>             bdrv_drain_all()
>                 aio_poll(A)
>                 aio_poll(B)
>                 aio_poll(C)
>             ...
> 
> If the aio_poll(C) in the middle receives a new virtio-blk request from
> ioeventfd, a new request will be submitted to C, then snapshot C is
> inconsistent.
> 
> To avoid that, use aio_set_io_event_notifier so the behavior is the same
> as in main loop.
> 
> Signed-off-by: Fam Zheng <f...@redhat.com>
> ---
>  hw/block/dataplane/virtio-blk.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 

again, letting others comment on the technical merits

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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to