fda7fbcd8d
- kvm-i386-Resolve-CPU-models-to-v1-by-default.patch [bz#1779078 bz#1787291 bz#1779078 bz#1779078] - kvm-iotests-Support-job-complete-in-run_job.patch [bz#1781637] - kvm-iotests-Create-VM.blockdev_create.patch [bz#1781637] - kvm-block-Activate-recursively-even-for-already-active-n.patch [bz#1781637] - kvm-hmp-Allow-using-qdev-ID-for-qemu-io-command.patch [bz#1781637] - kvm-iotests-Test-external-snapshot-with-VM-state.patch [bz#1781637] - kvm-iotests.py-Let-wait_migration-wait-even-more.patch [bz#1781637] - kvm-blockdev-fix-coding-style-issues-in-drive_backup_pre.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-blockdev-unify-qmp_drive_backup-and-drive-backup-tra.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-blockdev-unify-qmp_blockdev_backup-and-blockdev-back.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-blockdev-honor-bdrv_try_set_aio_context-context-requ.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-backup-top-Begin-drain-earlier.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-block-backup-top-Don-t-acquire-context-while-droppin.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-blockdev-Acquire-AioContext-on-dirty-bitmap-function.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-blockdev-Return-bs-to-the-proper-context-on-snapshot.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-iotests-Test-handling-of-AioContexts-with-some-block.patch [bz#1745606 bz#1746217 bz#1773517 bz#1779036 bz#1782111 bz#1782175 bz#1783965] - kvm-target-arm-monitor-query-cpu-model-expansion-crashed.patch [bz#1801320] - kvm-docs-arm-cpu-features-Make-kvm-no-adjvtime-comment-c.patch [bz#1801320] - Resolves: bz#1745606 (Qemu hang when do incremental live backup in transaction mode without bitmap) - Resolves: bz#1746217 (Src qemu hang when do storage vm migration during guest installation) - Resolves: bz#1773517 (Src qemu hang when do storage vm migration with dataplane enable) - Resolves: bz#1779036 (Qemu coredump when do snapshot in transaction mode with one snapshot path not exist) - Resolves: bz#1779078 (RHVH 4.4: Failed to run VM on 4.3/4.4 engine (Exit message: the CPU is incompatible with host CPU: Host CPU does not provide required features: hle, rtm)) - Resolves: bz#1781637 (qemu crashed when do mem and disk snapshot) - Resolves: bz#1782111 (Qemu hang when do full backup on multi-disks with one job's 'job-id' missed in transaction mode(data plane enable)) - Resolves: bz#1782175 (Qemu core dump when add persistent bitmap(data plane enable)) - Resolves: bz#1783965 (Qemu core dump when do backup with sync: bitmap and no bitmap provided) - Resolves: bz#1787291 (RHVH 4.4: Failed to run VM on 4.3/4.4 engine (Exit message: the CPU is incompatible with host CPU: Host CPU does not provide required features: hle, rtm) [rhel-8.1.0.z]) - Resolves: bz#1801320 (aarch64: backport query-cpu-model-expansion and adjvtime document fixes)
145 lines
5.0 KiB
Diff
145 lines
5.0 KiB
Diff
From 959955217f745f1ee6cbea97314efe69f2d7dc08 Mon Sep 17 00:00:00 2001
|
|
From: Sergio Lopez Pascual <slp@redhat.com>
|
|
Date: Fri, 7 Feb 2020 11:27:43 +0000
|
|
Subject: [PATCH 10/18] blockdev: unify qmp_blockdev_backup and blockdev-backup
|
|
transaction paths
|
|
|
|
RH-Author: Sergio Lopez Pascual <slp@redhat.com>
|
|
Message-id: <20200207112749.25073-4-slp@redhat.com>
|
|
Patchwork-id: 93756
|
|
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 3/9] blockdev: unify qmp_blockdev_backup and blockdev-backup transaction paths
|
|
Bugzilla: 1745606 1746217 1773517 1779036 1782111 1782175 1783965
|
|
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
|
|
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
|
Issuing a blockdev-backup from qmp_blockdev_backup takes a slightly
|
|
different path than when it's issued from a transaction. In the code,
|
|
this is manifested as some redundancy between do_blockdev_backup() and
|
|
blockdev_backup_prepare().
|
|
|
|
This change unifies both paths, merging do_blockdev_backup() and
|
|
blockdev_backup_prepare(), and changing qmp_blockdev_backup() to
|
|
create a transaction instead of calling do_backup_common() direcly.
|
|
|
|
As a side-effect, now qmp_blockdev_backup() is executed inside a
|
|
drained section, as it happens when creating a blockdev-backup
|
|
transaction. This change is visible from the user's perspective, as
|
|
the job gets paused and immediately resumed before starting the actual
|
|
work.
|
|
|
|
Signed-off-by: Sergio Lopez <slp@redhat.com>
|
|
Reviewed-by: Max Reitz <mreitz@redhat.com>
|
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
(cherry picked from commit 5b7bfe515ecbd584b40ff6e41d2fd8b37c7d5139)
|
|
Signed-off-by: Sergio Lopez <slp@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
blockdev.c | 60 +++++++++++++-----------------------------------------------
|
|
1 file changed, 13 insertions(+), 47 deletions(-)
|
|
|
|
diff --git a/blockdev.c b/blockdev.c
|
|
index 5e85fc0..152a0f7 100644
|
|
--- a/blockdev.c
|
|
+++ b/blockdev.c
|
|
@@ -1940,16 +1940,13 @@ typedef struct BlockdevBackupState {
|
|
BlockJob *job;
|
|
} BlockdevBackupState;
|
|
|
|
-static BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn,
|
|
- Error **errp);
|
|
-
|
|
static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
|
|
{
|
|
BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
|
|
BlockdevBackup *backup;
|
|
- BlockDriverState *bs, *target;
|
|
+ BlockDriverState *bs;
|
|
+ BlockDriverState *target_bs;
|
|
AioContext *aio_context;
|
|
- Error *local_err = NULL;
|
|
|
|
assert(common->action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP);
|
|
backup = common->action->u.blockdev_backup.data;
|
|
@@ -1959,8 +1956,8 @@ static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
|
|
return;
|
|
}
|
|
|
|
- target = bdrv_lookup_bs(backup->target, backup->target, errp);
|
|
- if (!target) {
|
|
+ target_bs = bdrv_lookup_bs(backup->target, backup->target, errp);
|
|
+ if (!target_bs) {
|
|
return;
|
|
}
|
|
|
|
@@ -1971,13 +1968,10 @@ static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
|
|
/* Paired with .clean() */
|
|
bdrv_drained_begin(state->bs);
|
|
|
|
- state->job = do_blockdev_backup(backup, common->block_job_txn, &local_err);
|
|
- if (local_err) {
|
|
- error_propagate(errp, local_err);
|
|
- goto out;
|
|
- }
|
|
+ state->job = do_backup_common(qapi_BlockdevBackup_base(backup),
|
|
+ bs, target_bs, aio_context,
|
|
+ common->block_job_txn, errp);
|
|
|
|
-out:
|
|
aio_context_release(aio_context);
|
|
}
|
|
|
|
@@ -3695,41 +3689,13 @@ XDbgBlockGraph *qmp_x_debug_query_block_graph(Error **errp)
|
|
return bdrv_get_xdbg_block_graph(errp);
|
|
}
|
|
|
|
-BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn,
|
|
- Error **errp)
|
|
+void qmp_blockdev_backup(BlockdevBackup *backup, Error **errp)
|
|
{
|
|
- BlockDriverState *bs;
|
|
- BlockDriverState *target_bs;
|
|
- AioContext *aio_context;
|
|
- BlockJob *job;
|
|
-
|
|
- bs = bdrv_lookup_bs(backup->device, backup->device, errp);
|
|
- if (!bs) {
|
|
- return NULL;
|
|
- }
|
|
-
|
|
- target_bs = bdrv_lookup_bs(backup->target, backup->target, errp);
|
|
- if (!target_bs) {
|
|
- return NULL;
|
|
- }
|
|
-
|
|
- aio_context = bdrv_get_aio_context(bs);
|
|
- aio_context_acquire(aio_context);
|
|
-
|
|
- job = do_backup_common(qapi_BlockdevBackup_base(backup),
|
|
- bs, target_bs, aio_context, txn, errp);
|
|
-
|
|
- aio_context_release(aio_context);
|
|
- return job;
|
|
-}
|
|
-
|
|
-void qmp_blockdev_backup(BlockdevBackup *arg, Error **errp)
|
|
-{
|
|
- BlockJob *job;
|
|
- job = do_blockdev_backup(arg, NULL, errp);
|
|
- if (job) {
|
|
- job_start(&job->job);
|
|
- }
|
|
+ TransactionAction action = {
|
|
+ .type = TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP,
|
|
+ .u.blockdev_backup.data = backup,
|
|
+ };
|
|
+ blockdev_do_action(&action, errp);
|
|
}
|
|
|
|
/* Parameter check and block job starting for drive mirroring.
|
|
--
|
|
1.8.3.1
|
|
|