[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] job_pause_point

From: John Snow
Subject: Re: [Qemu-block] job_pause_point
Date: Wed, 30 Jan 2019 14:58:35 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0

On 1/30/19 8:58 AM, Vladimir Sementsov-Ogievskiy wrote:
> Hi!
> I have a question about job_pause_point. Now a good job of moving generic 
> things about
> block-jobs to job.c is done..
> job_pause_point do visible job-state change, as changing job->status and 
> job->paused.
> Is it assumed, that job don't do anything after that state change? Iotests 
> are written
> exactly with this assumption. On the other hand, code don't guarantee, that 
> all in-flight
> requests are finished to this point.

Oh, right. The job being paused only certifies that the coroutine
driving the job isn't running. It has no real idea about mirror's
asynchronous children.

> Moreover, only the job itself knows about it's in-flight requests, therefore 
> we can't
> handle it in generic job_pause_point(). So, should not job do something like
> if (job_should_pause()) {
>     don't create more requests
>     wait all in-flight requests to complete
> }
> job_pause_point()
> Or didn't I miss these things already discussed?

Well, mirror's pause callback does this:

static void coroutine_fn mirror_pause(Job *job)
    MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job);


That's invoked BEFORE we change our status. That ought to be sufficient,
is it not?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]