mirror of https://github.com/xqemu/xqemu.git
block: move input parsing code in qmp_transaction()
The code is moved into preparation function, and changed a bit to tip more clearly what it is doing. Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
9b9877ee9f
commit
e2a31e8798
38
blockdev.c
38
blockdev.c
|
@ -785,10 +785,7 @@ typedef struct BlkTransactionStates {
|
||||||
QSIMPLEQ_ENTRY(BlkTransactionStates) entry;
|
QSIMPLEQ_ENTRY(BlkTransactionStates) entry;
|
||||||
} BlkTransactionStates;
|
} BlkTransactionStates;
|
||||||
|
|
||||||
static void external_snapshot_prepare(const char *device,
|
static void external_snapshot_prepare(BlockdevAction *action,
|
||||||
const char *format,
|
|
||||||
const char *new_image_file,
|
|
||||||
enum NewImageMode mode,
|
|
||||||
BlkTransactionStates *states,
|
BlkTransactionStates *states,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -796,7 +793,24 @@ static void external_snapshot_prepare(const char *device,
|
||||||
BlockDriver *drv;
|
BlockDriver *drv;
|
||||||
int flags, ret;
|
int flags, ret;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
const char *device;
|
||||||
|
const char *new_image_file;
|
||||||
|
const char *format = "qcow2";
|
||||||
|
enum NewImageMode mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
||||||
|
|
||||||
|
/* get parameters */
|
||||||
|
g_assert(action->kind == BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC);
|
||||||
|
|
||||||
|
device = action->blockdev_snapshot_sync->device;
|
||||||
|
new_image_file = action->blockdev_snapshot_sync->snapshot_file;
|
||||||
|
if (action->blockdev_snapshot_sync->has_format) {
|
||||||
|
format = action->blockdev_snapshot_sync->format;
|
||||||
|
}
|
||||||
|
if (action->blockdev_snapshot_sync->has_mode) {
|
||||||
|
mode = action->blockdev_snapshot_sync->mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* start processing */
|
||||||
drv = bdrv_find_format(format);
|
drv = bdrv_find_format(format);
|
||||||
if (!drv) {
|
if (!drv) {
|
||||||
error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
|
error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
|
||||||
|
@ -877,10 +891,6 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp)
|
||||||
/* We don't do anything in this loop that commits us to the snapshot */
|
/* We don't do anything in this loop that commits us to the snapshot */
|
||||||
while (NULL != dev_entry) {
|
while (NULL != dev_entry) {
|
||||||
BlockdevAction *dev_info = NULL;
|
BlockdevAction *dev_info = NULL;
|
||||||
enum NewImageMode mode;
|
|
||||||
const char *new_image_file;
|
|
||||||
const char *device;
|
|
||||||
const char *format = "qcow2";
|
|
||||||
|
|
||||||
dev_info = dev_entry->value;
|
dev_info = dev_entry->value;
|
||||||
dev_entry = dev_entry->next;
|
dev_entry = dev_entry->next;
|
||||||
|
@ -890,17 +900,7 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp)
|
||||||
|
|
||||||
switch (dev_info->kind) {
|
switch (dev_info->kind) {
|
||||||
case BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC:
|
case BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC:
|
||||||
device = dev_info->blockdev_snapshot_sync->device;
|
external_snapshot_prepare(dev_info, states, errp);
|
||||||
if (!dev_info->blockdev_snapshot_sync->has_mode) {
|
|
||||||
dev_info->blockdev_snapshot_sync->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
|
||||||
}
|
|
||||||
new_image_file = dev_info->blockdev_snapshot_sync->snapshot_file;
|
|
||||||
if (dev_info->blockdev_snapshot_sync->has_format) {
|
|
||||||
format = dev_info->blockdev_snapshot_sync->format;
|
|
||||||
}
|
|
||||||
mode = dev_info->blockdev_snapshot_sync->mode;
|
|
||||||
external_snapshot_prepare(device, format, new_image_file,
|
|
||||||
mode, states, &local_err);
|
|
||||||
if (error_is_set(&local_err)) {
|
if (error_is_set(&local_err)) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto delete_and_fail;
|
goto delete_and_fail;
|
||||||
|
|
Loading…
Reference in New Issue