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.

Attachment: signature.asc
Description: PGP signature

Reply via email to