On Mon, Mar 15, 2021 at 11:15:44PM +0300, Vladimir Sementsov-Ogievskiy wrote:
15.03.2021 09:06, Roman Kagan wrote:
As the reconnect logic no longer interferes with drained sections, it
appears unnecessary to explicitly manipulate the in_flight counter.
Fixes: 5ad81b4946 ("nbd: Restrict connection_co reentrance")
And here you actually allow qemu_aio_coroutine_enter() call in
nbd_client_attach_aio_context_bh() to enter connection_co in any yield
point which is possible during drained section. The analysis should be
done to be sure that all these yield points are safe for reentering by
external qemu_aio_coroutine_enter(). (By external I mean not by the
actual enter() we are waiting for at the yield() point. For example
qemu_channel_yield() supports reentering.. And therefore (as I
understand after fast looking through) nbd_read() should support
reentering too..
I'll do a more thorough analysis of how safe it is.
FWIW this hasn't triggered any test failures yet, but that assert in
patch 3 didn't ever go off either so I'm not sure I can trust the tests
on this.