qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] job_pause_point


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [Qemu-devel] job_pause_point
Date: Thu, 31 Jan 2019 07:52:34 +0000

30.01.2019 22:58, John Snow wrote:
> 
> 
> 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);
> 
>      mirror_wait_for_all_io(s);
> }
> 
> That's invoked BEFORE we change our status. That ought to be sufficient,
> is it not?
> 
> --js
> 

Oh, yes, seems that it is what I missed, thank you.

-- 
Best regards,
Vladimir

reply via email to

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