On Wed, Jun 15, 2016 at 05:05:28PM +0800, Fam Zheng wrote: > On Tue, 06/14 19:17, Stefan Hajnoczi wrote: > > > > +static void block_job_attached_aio_context(AioContext *new_context, > > + void *opaque) > > +{ > > + BlockJob *job = opaque; > > + > > + if (job->driver->attached_aio_context) { > > + job->driver->attached_aio_context(job, new_context); > > + } > > + > > + block_job_resume(job); > > +} > > + > > +static void block_job_detach_aio_context(void *opaque) > > +{ > > + BlockJob *job = opaque; > > + > > + /* In case the job terminates during aio_poll()... */ > > + block_job_ref(job); > > + > > + block_job_pause(job); > > + > > + if (!job->paused) { > > + /* If job is !job->busy this kicks it into the next pause point. */ > > + block_job_enter(job); > > + } > > + while (!job->paused && !job->completed) { > > + aio_poll(blk_get_aio_context(job->blk), true); > > For the complete part, we should do it like block_job_finish_sync: > > while (!job->completed) { > aio_poll(job->deferred_to_main_loop ? qemu_get_aio_context() : > blk_get_aio_context(job->blk), > true); > }
Will fix in v5.
signature.asc
Description: PGP signature