[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v5 11/15] block: simplify blockdev-backup
From: |
Denis V. Lunev |
Subject: |
[Qemu-block] [PATCH v5 11/15] block: simplify blockdev-backup |
Date: |
Mon, 4 Jul 2016 15:28:22 +0300 |
From: Pavel Butsykin <address@hidden>
Now that we can support boxed commands, use it to greatly reduce the
number of parameters (and likelihood of getting out of sync) when
adjusting blockdev-backup parameters.
Signed-off-by: Pavel Butsykin <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
CC: Jeff Cody <address@hidden>
CC: Markus Armbruster <address@hidden>
CC: Eric Blake <address@hidden>
CC: John Snow <address@hidden>
CC: Stefan Hajnoczi <address@hidden>
CC: Kevin Wolf <address@hidden>
---
blockdev.c | 65 +++++++++++++++-------------------------------------
qapi/block-core.json | 6 ++++-
2 files changed, 24 insertions(+), 47 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index f002cc0..8f55590 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1903,14 +1903,8 @@ typedef struct BlockdevBackupState {
AioContext *aio_context;
} BlockdevBackupState;
-static void do_blockdev_backup(const char *device, const char *target,
- enum MirrorSyncMode sync,
- bool has_speed, int64_t speed,
- bool has_on_source_error,
- BlockdevOnError on_source_error,
- bool has_on_target_error,
- BlockdevOnError on_target_error,
- BlockJobTxn *txn, Error **errp);
+static void do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn,
+ Error **errp);
static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
{
@@ -1950,12 +1944,7 @@ static void blockdev_backup_prepare(BlkActionState
*common, Error **errp)
state->bs = blk_bs(blk);
bdrv_drained_begin(state->bs);
- do_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,
- common->block_job_txn, &local_err);
+ do_blockdev_backup(backup, common->block_job_txn, &local_err);
if (local_err) {
error_propagate(errp, local_err);
return;
@@ -3268,14 +3257,7 @@ BlockDeviceInfoList *qmp_query_named_block_nodes(Error
**errp)
return bdrv_named_nodes_list(errp);
}
-void do_blockdev_backup(const char *device, const char *target,
- enum MirrorSyncMode sync,
- bool has_speed, int64_t speed,
- bool has_on_source_error,
- BlockdevOnError on_source_error,
- bool has_on_target_error,
- BlockdevOnError on_target_error,
- BlockJobTxn *txn, Error **errp)
+void do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn, Error **errp)
{
BlockBackend *blk;
BlockDriverState *bs;
@@ -3283,19 +3265,19 @@ void do_blockdev_backup(const char *device, const char
*target,
Error *local_err = NULL;
AioContext *aio_context;
- if (!has_speed) {
- speed = 0;
+ if (!backup->has_speed) {
+ backup->speed = 0;
}
- if (!has_on_source_error) {
- on_source_error = BLOCKDEV_ON_ERROR_REPORT;
+ if (!backup->has_on_source_error) {
+ backup->on_source_error = BLOCKDEV_ON_ERROR_REPORT;
}
- if (!has_on_target_error) {
- on_target_error = BLOCKDEV_ON_ERROR_REPORT;
+ if (!backup->has_on_target_error) {
+ backup->on_target_error = BLOCKDEV_ON_ERROR_REPORT;
}
- blk = blk_by_name(device);
+ blk = blk_by_name(backup->device);
if (!blk) {
- error_setg(errp, "Device '%s' not found", device);
+ error_setg(errp, "Device '%s' not found", backup->device);
return;
}
@@ -3303,12 +3285,12 @@ void do_blockdev_backup(const char *device, const char
*target,
aio_context_acquire(aio_context);
if (!blk_is_available(blk)) {
- error_setg(errp, "Device '%s' has no medium", device);
+ error_setg(errp, "Device '%s' has no medium", backup->device);
goto out;
}
bs = blk_bs(blk);
- target_bs = bdrv_lookup_bs(target, target, errp);
+ target_bs = bdrv_lookup_bs(backup->target, backup->target, errp);
if (!target_bs) {
goto out;
}
@@ -3324,8 +3306,9 @@ void do_blockdev_backup(const char *device, const char
*target,
goto out;
}
}
- backup_start(bs, target_bs, speed, sync, NULL, on_source_error,
- on_target_error, block_job_cb, bs, txn, &local_err);
+ backup_start(bs, target_bs, backup->speed, backup->sync, NULL,
+ backup->on_source_error, backup->on_target_error,
block_job_cb,
+ bs, txn, &local_err);
if (local_err != NULL) {
error_propagate(errp, local_err);
}
@@ -3333,19 +3316,9 @@ out:
aio_context_release(aio_context);
}
-void qmp_blockdev_backup(const char *device, const char *target,
- enum MirrorSyncMode sync,
- bool has_speed, int64_t speed,
- bool has_on_source_error,
- BlockdevOnError on_source_error,
- bool has_on_target_error,
- BlockdevOnError on_target_error,
- Error **errp)
+void qmp_blockdev_backup(BlockdevBackup *arg, Error **errp)
{
- do_blockdev_backup(device, target, sync, has_speed, speed,
- has_on_source_error, on_source_error,
- has_on_target_error, on_target_error,
- NULL, errp);
+ do_blockdev_backup(arg, NULL, errp);
}
/* Parameter check and block job starting for drive mirroring.
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 6bd627e..8e0750a 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1088,9 +1088,13 @@
#
# For the arguments, see the documentation of BlockdevBackup.
#
+# Returns: nothing on success
+# If @device is not a valid block device, DeviceNotFound
+#
# Since 2.3
##
-{ 'command': 'blockdev-backup', 'data': 'BlockdevBackup' }
+{ 'command': 'blockdev-backup', 'box': true,
+ 'data': 'BlockdevBackup' }
##
--
2.1.4
- [Qemu-block] [PATCH v5 01/15] block: switch blk_write_compressed() to byte-based interface, (continued)
- [Qemu-block] [PATCH v5 01/15] block: switch blk_write_compressed() to byte-based interface, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 06/15] qcow: add qcow_co_pwritev_compressed, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 07/15] qcow: cleanup qcow_co_pwritev_compressed to avoid the recursion, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 09/15] block/io: turn on dirty_bitmaps for the compressed writes, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 08/15] block: remove BlockDriver.bdrv_write_compressed, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 10/15] block: simplify drive-backup, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 11/15] block: simplify blockdev-backup,
Denis V. Lunev <=
- [Qemu-block] [PATCH v5 13/15] blockdev-backup: added support for data compression, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 12/15] drive-backup: added support for data compression, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 14/15] qemu-iotests: test backup compression in 055, Denis V. Lunev, 2016/07/04
- [Qemu-block] [PATCH v5 15/15] qemu-iotests: add vmdk for test backup compression in 055, Denis V. Lunev, 2016/07/04
- Re: [Qemu-block] [PATCH v5 00/15] backup compression, Denis V. Lunev, 2016/07/08