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. Thanks, Roman.