]> git.proxmox.com Git - mirror_qemu.git/commit - job.c
job: @force parameter for job_cancel_sync()
authorHanna Reitz <hreitz@redhat.com>
Wed, 6 Oct 2021 15:19:32 +0000 (17:19 +0200)
committerVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Thu, 7 Oct 2021 08:42:09 +0000 (10:42 +0200)
commit4cfb3f05627ad82af473e7f7ae113c3884cd04e3
tree4d25a7313cf5df35abc65ef3733a0bdc79ad9344
parent1d4a43e9464f8945bd8aa2ed9d95f184b011befe
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>
block/replication.c
blockdev.c
include/qemu/job.h
job.c
tests/qemu-iotests/109.out
tests/qemu-iotests/tests/qsd-jobs.out
tests/unit/test-blockjob.c