On Fri, Apr 14, 2017 at 9:02 AM, Fam Zheng <f...@redhat.com> wrote: > @@ -398,11 +399,15 @@ void bdrv_drain_all(void); > */ \ > assert(!bs_->wakeup); \ > bs_->wakeup = true; \ > - while ((cond)) { \ > - aio_context_release(ctx_); \ > - aio_poll(qemu_get_aio_context(), true); \ > - aio_context_acquire(ctx_); \ > - waited_ = true; \ > + while (busy_) { \ > + if ((cond)) { \ > + waited_ = busy_ = true; \ > + aio_context_release(ctx_); \ > + aio_poll(qemu_get_aio_context(), true); \ > + aio_context_acquire(ctx_); \ > + } else { \ > + busy_ = aio_poll(ctx_, false); \ > + } \
Wait, I'm confused. The current thread is not in the BDS AioContext. We're not allowed to call aio_poll(ctx_, false). Did you mean aio_poll(qemu_get_aio_context(), false) in order to process defer to main loop BHs? Stefan