[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH] block: quiesce AioContext when detaching from i
Re: [Qemu-block] [PATCH] block: quiesce AioContext when detaching from it
Thu, 16 Mar 2017 00:44:16 +0100
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1
On 14.03.2017 12:11, Paolo Bonzini wrote:
> While it is true that bdrv_set_aio_context only works on a single
> BlockDriverState subtree (see commit message for 53ec73e, "block: Use
> bdrv_drain to replace uncessary bdrv_drain_all", 2015-07-07), it works
> at the AioContext level rather than the BlockDriverState level.
> Therefore, it is also necessary to trigger pending bottom halves too,
> even if no requests are pending.
> For NBD this ensures that the aio_co_schedule of a previous call to
> nbd_attach_aio_context is completed before detaching from the old
> AioContext; it fixes qemu-iotest 094. Another similar bug happens
> when the VM is stopped and the virtio-blk dataplane irqfd is torn down.
> In this case it's possible that guest I/O gets stuck if notify_guest_bh
> was scheduled but doesn't run.
> Calling aio_poll from another AioContext is safe if non-blocking; races
> such as the one mentioned in the commit message for c9d1a56 ("block:
> only call aio_poll on the current thread's AioContext", 2016-10-28)
> are a concern for blocking calls.
> I considered other options, including:
> - moving the bs->wakeup mechanism to AioContext, and letting the caller
> check. This might work for virtio which has a clear place to wakeup
> (notify_place_bh) and check the condition (virtio_blk_data_plane_stop).
> For aio_co_schedule I couldn't find a clear place to check the condition.
> - adding a dummy oneshot bottom half and waiting for it to trigger.
> This has the complication that bottom half list is LIFO for historical
> reasons. There were performance issues caused by bottom half ordering
> in the past, so I decided against it for 2.9.
> Fixes: 99723548561978da8ef44cf804fb7912698f5d88
> Reported-by: Max Reitz <address@hidden>
> Reported-by: Halil Pasic <address@hidden>
> Tested-by: Halil Pasic <address@hidden>
> Signed-off-by: Paolo Bonzini <address@hidden>
> block.c | 7 +++++++
> 1 file changed, 7 insertions(+)
Thanks, applied to my block branch:
Description: OpenPGP digital signature