diff options
author | Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> | 2021-01-17 00:46:51 +0300 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2021-01-26 14:36:37 +0100 |
commit | 3ee1483b95f314b960231c1c0b329bea4346f49c (patch) | |
tree | 00a1b261ffa596adcbe450bd89c9a9bcc1cf086e /job.c | |
parent | e0323a045f5929721c9f4b7437229f1dbdc5b5e5 (diff) | |
download | qemu-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.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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) |