[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v15 12/14] block: Add blockdev-backup to transaction
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v15 12/14] block: Add blockdev-backup to transaction |
Date: |
Sun, 23 Feb 2014 09:54:53 +0800 |
Signed-off-by: Fam Zheng <address@hidden>
---
blockdev.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
qapi-schema.json | 1 +
2 files changed, 49 insertions(+)
diff --git a/blockdev.c b/blockdev.c
index 5ffae90..5db5bbb 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1409,6 +1409,49 @@ static void drive_backup_abort(BlkTransactionState
*common)
}
}
+typedef struct BlockdevBackupState {
+ BlkTransactionState common;
+ BlockDriverState *bs;
+ BlockJob *job;
+} BlockdevBackupState;
+
+static void blockdev_backup_prepare(BlkTransactionState *common, Error **errp)
+{
+ BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common,
common);
+ BlockdevBackup *backup;
+ Error *local_err = NULL;
+
+ assert(common->action->kind == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP);
+ backup = common->action->blockdev_backup;
+
+ qmp_blockdev_backup(backup->device, backup->target,
+ backup->sync,
+ backup->has_speed, backup->speed,
+ backup->has_on_source_error, backup->on_source_error,
+ backup->has_on_target_error, backup->on_target_error,
+ &local_err);
+ if (error_is_set(&local_err)) {
+ error_propagate(errp, local_err);
+ state->bs = NULL;
+ state->job = NULL;
+ return;
+ }
+
+ state->bs = bdrv_find(backup->device);
+ state->job = state->bs->job;
+}
+
+static void blockdev_backup_abort(BlkTransactionState *common)
+{
+ BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common,
common);
+ BlockDriverState *bs = state->bs;
+
+ /* Only cancel if it's the job we started */
+ if (bs && bs->job && bs->job == state->job) {
+ block_job_cancel_sync(bs->job);
+ }
+}
+
static void abort_prepare(BlkTransactionState *common, Error **errp)
{
error_setg(errp, "Transaction aborted using Abort action");
@@ -1431,6 +1474,11 @@ static const BdrvActionOps actions[] = {
.prepare = drive_backup_prepare,
.abort = drive_backup_abort,
},
+ [TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP] = {
+ .instance_size = sizeof(BlockdevBackupState),
+ .prepare = blockdev_backup_prepare,
+ .abort = blockdev_backup_abort,
+ },
[TRANSACTION_ACTION_KIND_ABORT] = {
.instance_size = sizeof(BlkTransactionState),
.prepare = abort_prepare,
diff --git a/qapi-schema.json b/qapi-schema.json
index 0721c4a..068e2e8 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1973,6 +1973,7 @@
'data': {
'blockdev-snapshot-sync': 'BlockdevSnapshot',
'drive-backup': 'DriveBackup',
+ 'blockdev-backup': 'BlockdevBackup',
'abort': 'Abort',
'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal'
} }
--
1.8.5.4
- [Qemu-devel] [PATCH v15 02/14] block: Introduce op_blockers to BlockDriverState, (continued)
- [Qemu-devel] [PATCH v15 02/14] block: Introduce op_blockers to BlockDriverState, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 03/14] block: Replace in_use with operation blocker, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 04/14] block: Move op_blocker check from block_job_create to its caller, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 05/14] block: Add bdrv_set_backing_hd(), Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 06/14] block: Add backing_blocker in BlockDriverState, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 07/14] block: Parse "backing" option to reference existing BDS, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 08/14] block: Support dropping active in bdrv_drop_intermediate, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 09/14] stream: Use bdrv_drop_intermediate and drop close_unused_images, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 10/14] qmp: Add command 'blockdev-backup', Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 11/14] block: Allow backup on referenced named BlockDriverState, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 12/14] block: Add blockdev-backup to transaction,
Fam Zheng <=
- [Qemu-devel] [PATCH v15 13/14] qemu-iotests: Test blockdev-backup in 055, Fam Zheng, 2014/02/22
- [Qemu-devel] [PATCH v15 14/14] qemu-iotests: Image fleecing test case 083, Fam Zheng, 2014/02/22