summaryrefslogtreecommitdiffstats
path: root/blockdev.c
diff options
context:
space:
mode:
authorHanna Reitz2021-10-06 17:19:32 +0200
committerVladimir Sementsov-Ogievskiy2021-10-07 10:42:09 +0200
commit4cfb3f05627ad82af473e7f7ae113c3884cd04e3 (patch)
tree4d25a7313cf5df35abc65ef3733a0bdc79ad9344 /blockdev.c
parentjob: Force-cancel jobs in a failed transaction (diff)
downloadqemu-4cfb3f05627ad82af473e7f7ae113c3884cd04e3.tar.gz
qemu-4cfb3f05627ad82af473e7f7ae113c3884cd04e3.tar.xz
qemu-4cfb3f05627ad82af473e7f7ae113c3884cd04e3.zip
job: @force parameter for job_cancel_sync()
Callers should be able to specify whether they want job_cancel_sync() to force-cancel the job or not. In fact, almost all invocations do not care about consistency of the result and just want the job to terminate as soon as possible, so they should pass force=true. The replication block driver is the exception, specifically the active commit job it runs. As for job_cancel_sync_all(), all callers want it to force-cancel all jobs, because that is the point of it: To cancel all remaining jobs as quickly as possible (generally on process termination). So make it invoke job_cancel_sync() with force=true. This changes some iotest outputs, because quitting qemu while a mirror job is active will now lead to it being cancelled instead of completed, which is what we want. (Cancelling a READY mirror job with force=false may take an indefinite amount of time, which we do not want when quitting. If users want consistent results, they must have all jobs be done before they quit qemu.) Buglink: https://gitlab.com/qemu-project/qemu/-/issues/462 Signed-off-by: Hanna Reitz <hreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20211006151940.214590-6-hreitz@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Diffstat (limited to 'blockdev.c')
-rw-r--r--blockdev.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/blockdev.c b/blockdev.c
index e79c5f3b5e..b35072644e 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1847,7 +1847,7 @@ static void drive_backup_abort(BlkActionState *common)
aio_context = bdrv_get_aio_context(state->bs);
aio_context_acquire(aio_context);
- job_cancel_sync(&state->job->job);
+ job_cancel_sync(&state->job->job, true);
aio_context_release(aio_context);
}
@@ -1948,7 +1948,7 @@ static void blockdev_backup_abort(BlkActionState *common)
aio_context = bdrv_get_aio_context(state->bs);
aio_context_acquire(aio_context);
- job_cancel_sync(&state->job->job);
+ job_cancel_sync(&state->job->job, true);
aio_context_release(aio_context);
}