[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] block: for jobs, do not clear user_paused until
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH] block: for jobs, do not clear user_paused until after the resume |
Date: |
Wed, 15 Aug 2018 17:23:43 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 08/15/2018 11:59 AM, Jeff Cody wrote:
> The function job_cancel_async() will always cause an assert for blockjob
> user resume. We set job->user_paused to false, and then call
> job->driver->user_resume(). In the case of blockjobs, this is the
> block_job_user_resume() function.
>
> In that function, we assert that job.user_paused is set to true.
> Unfortunately, right before calling this function, it has explicitly
> been set to false.
>
> The fix is pretty simple: set job->user_paused to false only after the
> job user_resume() function has been called.
>
> Signed-off-by: Jeff Cody <address@hidden>
> ---
> job.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/job.c b/job.c
> index fa671b431a..e36ebaafd8 100644
> --- a/job.c
> +++ b/job.c
> @@ -732,10 +732,10 @@ static void job_cancel_async(Job *job, bool force)
> {
> if (job->user_paused) {
> /* Do not call job_enter here, the caller will handle it. */
> - job->user_paused = false;
> if (job->driver->user_resume) {
> job->driver->user_resume(job);
> }
> + job->user_paused = false;
> assert(job->pause_count > 0);
> job->pause_count--;
> }
>
Looks right to me; are you going to make good on your threat of a v2
with a unit test?
Reviewed-by: John Snow <address@hidden>