On Mon, Mar 15, 2021 at 10:45:39PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> 15.03.2021 09:06, Roman Kagan wrote:
> > The reconnection logic doesn't need to stop while in a drained section.
> > Moreover it has to be active during the drained section, as the requests
> > that were caught in-flight with the connection to the server broken can
> > only usefully get drained if the connection is restored. Otherwise such
> > requests can only either stall resulting in a deadlock (before
> > 8c517de24a), or be aborted defeating the purpose of the reconnection
> > machinery (after 8c517de24a).
> >
> > This series aims to just stop messing with the drained section in the
> > reconnection code.
> >
> > While doing so it undoes the effect of 5ad81b4946 ("nbd: Restrict
> > connection_co reentrance"); as I've missed the point of that commit I'd
> > appreciate more scrutiny in this area.
>
>
> The actual point is:
>
> connection_co (together with all functions called from it) has a lot of yield
> points. And we can't just enter the coroutine in any of the when we want, as
> it may break some BH which is actually waited for in this yield point..
>
> Still, we should care only about yield points possible during drained
> section, so we don't need to care about direct qemu_coroutine_yield() inside
> nbd_connection_entry().
>
> Many things changed since 5ad81b4946.. So probably, now all the (possible
> during drained section) yield points in nbd_connection_entry support
> reentering. But some analysis of possible yield points should be done.
Thanks for the explanation. Will do this analysis.
Roman.