Prevent a situation, when some jobs from transaction are already finished and user tries to cancel a job from this transaction.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> --- blockdev.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/blockdev.c b/blockdev.c index 59ae9e4..d1818c2 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3772,6 +3772,17 @@ void qmp_block_job_cancel(const char *device, goto out; } + if (block_job_txn_all_success(job)) { + if (job->txn != NULL) { + error_setg(errp, "All block jobs in transaction for device '%s' are" + "already successed", device); + } else { + error_setg(errp, "The block job for device '%s' is" + "already successed", device); + } + goto out; + } + trace_qmp_block_job_cancel(job); block_job_cancel(job); out: -- 1.8.3.1