On Tue, 08/07 12:15, Paolo Bonzini wrote: > On 07/08/2018 11:16, Fam Zheng wrote: > > main thread IO Thread > > =============================================================== > > bdrv_drained_begin() > > aio_disable_external(ctx) > > aio_poll(ctx, true) > > ctx->notify_me += 2 > > ppoll() /* blocked */ > > ... > > bdrv_drained_end() > > ... > > aio_notify()
[2] ^^^^^ > > ... > > bdrv_set_aio_context() > > aio_poll(ctx, false) > > [1] aio_notify_accept(ctx) > > /* Hang! */ > > Should ppoll() rather be after [1]? Otherwise the new commit message > and patches look great. Good point. They race and I think aio_notify_accept() is indeed done before ppoll() starts its waiting. I will finish testing and send v3. Fam > > > aio_notify() only injects an event when ctx->notify_me is set, > > correspondingly aio_notify_accept() is only useful when ctx->notify_me > > _was_ set. > > Very good point. > > (Please Cc qemu-stable on the second patch too). > > Paolo