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() > ... > 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. > 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