[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH-for-5.1] hw/ide: Do not block for AIO while resetting a d
From: |
Stefan Hajnoczi |
Subject: |
Re: [RFC PATCH-for-5.1] hw/ide: Do not block for AIO while resetting a drive |
Date: |
Mon, 20 Jul 2020 11:02:46 +0100 |
On Fri, Jul 17, 2020 at 07:19:38PM +0200, Philippe Mathieu-Daudé wrote:
> Last minute chat:
> 19:01 <stefanha> f4bug: use bdrv_aio_cancel_async() if possible because it
> won't block the current thread.
> 19:02 <stefanha> f4bug: For example, in device emulation code where the guest
> has requested to cancel an I/O request it's often possible to use the async
> version.
> 19:02 <stefanha> f4bug: But in synchronous code like device reset it may be
> necessary to use the synchronous (blocking) bdrv_aio_cancel() API instead. :(
> 19:14 <stefanha> f4bug: The way to decide is: will the current function
> return to the event loop and is there someone who will handle the request
> completion callback when cancel finishes?
> 19:14 <stefanha> f4bug: If the next line of code requires the request to
> finished then async cancel cannot be used.
> 19:15 <stefanha> f4bug: On the other hand, if the function can return and
> it's okay for the request to cancel at some future time then you can use
> async.
>
> So I'll revisit this patch :)
> ---
> hw/ide/core.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index d997a78e47..e3a9ce7d25 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -1315,7 +1315,8 @@ static void ide_reset(IDEState *s)
> trace_ide_reset(s);
>
> if (s->pio_aiocb) {
> - blk_aio_cancel(s->pio_aiocb);
> + /* If there is a pending AIO callback, invoke it now. */
> + blk_aio_cancel_async(s->pio_aiocb);
This is a place where an async call is not allowed. The completion
function must be called right away (synchronously) before we can
continue resetting the device.
I sent a patch that allows bdrv_aio_cancel() to find the AioContext so
it can call aio_poll().
Stefan
signature.asc
Description: PGP signature