[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield()
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry |
Date: |
Wed, 23 Aug 2017 15:45:53 +0100 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
On Tue, Aug 22, 2017 at 03:23:32PM +0200, Paolo Bonzini wrote:
> On 22/08/2017 14:51, Stefan Hajnoczi wrote:
> > This should fix the issue that Dave is seeing but I'm concerned that
> > there are more problems in nbd-client.c. We don't have good
> > abstractions for writing coroutine socket I/O code. Something like Go's
> > channels would avoid manual low-level coroutine calls. There is
> > currently no way to cancel qio_channel_yield() so requests doing I/O may
> > remain in-flight indefinitely and nbd-client.c doesn't join them...
>
> The idea was that shutdown(2) would force them to reenter...
That depends on the BDRV_POLL_WHILE() allowing all request coroutines to
terminate before we call nbd_client_detach_aio_context():
qio_channel_shutdown(client->ioc,
QIO_CHANNEL_SHUTDOWN_BOTH,
NULL);
BDRV_POLL_WHILE(bs, client->read_reply_co);
nbd_client_detach_aio_context(bs);
I'm not sure we have any guarantee that request coroutines will have
terminated.
Once nbd_client_detach_aio_context() is called
ioc->read_coroutine/write_coroutine are set to NULL. At that point any
remaining coroutine doing I/O on ioc will be in trouble.
Stefan
- [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Stefan Hajnoczi, 2017/08/22
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Paolo Bonzini, 2017/08/22
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry,
Stefan Hajnoczi <=
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Dr. David Alan Gilbert, 2017/08/22
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Eric Blake, 2017/08/23
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Eric Blake, 2017/08/23
- Re: [Qemu-block] [PATCH] nbd-client: avoid spurious qio_channel_yield() re-entry, Eric Blake, 2017/08/23