aboutsummaryrefslogtreecommitdiff
path: root/job.c
diff options
context:
space:
mode:
authorVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>2021-01-17 00:46:51 +0300
committerMax Reitz <mreitz@redhat.com>2021-01-26 14:36:37 +0100
commit3ee1483b95f314b960231c1c0b329bea4346f49c (patch)
tree00a1b261ffa596adcbe450bd89c9a9bcc1cf086e /job.c
parente0323a045f5929721c9f4b7437229f1dbdc5b5e5 (diff)
downloadqemu-3ee1483b95f314b960231c1c0b329bea4346f49c.zip
qemu-3ee1483b95f314b960231c1c0b329bea4346f49c.tar.gz
qemu-3ee1483b95f314b960231c1c0b329bea4346f49c.tar.bz2
job: call job_enter from job_pause
If main job coroutine called job_yield (while some background process is in progress), we should give it a chance to call job_pause_point(). It will be used in backup, when moved on async block-copy. Note, that job_user_pause is not enough: we want to handle child_job_drained_begin() as well, which call job_pause(). Still, if job is already in job_do_yield() in job_pause_point() we should not enter it. iotest 109 output is modified: on stop we do bdrv_drain_all() which now triggers job pause immediately (and pause after ready is standby). Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210116214705.822267-10-vsementsov@virtuozzo.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'job.c')
-rw-r--r--job.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/job.c b/job.c
index 8fecf38..3aaaeba 100644
--- a/job.c
+++ b/job.c
@@ -553,6 +553,9 @@ static bool job_timer_not_pending(Job *job)
void job_pause(Job *job)
{
job->pause_count++;
+ if (!job->paused) {
+ job_enter(job);
+ }
}
void job_resume(Job *job)