提交 d967b2f1 编写于 作者: J Jes Sorensen 提交者: Luiz Capitulino

QMP: add snapshot-blkdev-sync command

Add QMP bits for snapshot_blkdev command. This is the same as
snapshot_blkdev in the human monitor. The command is synchronous.

In the future async commands and or a break down of the functionality
into multiple commands might be added.

Also change the 'snapshot_file' argument to 'snapshot-file' in
the human monitor, so that it matches QMP.
Signed-off-by: NJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NLuiz Capitulino <lcapitulino@gmail.com>
上级 6c916eda
...@@ -568,7 +568,7 @@ void do_commit(Monitor *mon, const QDict *qdict) ...@@ -568,7 +568,7 @@ void do_commit(Monitor *mon, const QDict *qdict)
int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data)
{ {
const char *device = qdict_get_str(qdict, "device"); const char *device = qdict_get_str(qdict, "device");
const char *filename = qdict_get_try_str(qdict, "snapshot_file"); const char *filename = qdict_get_try_str(qdict, "snapshot-file");
const char *format = qdict_get_try_str(qdict, "format"); const char *format = qdict_get_try_str(qdict, "format");
BlockDriverState *bs; BlockDriverState *bs;
BlockDriver *drv, *old_drv, *proto_drv; BlockDriver *drv, *old_drv, *proto_drv;
...@@ -577,7 +577,7 @@ int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data) ...@@ -577,7 +577,7 @@ int do_snapshot_blkdev(Monitor *mon, const QDict *qdict, QObject **ret_data)
char old_filename[1024]; char old_filename[1024];
if (!filename) { if (!filename) {
qerror_report(QERR_MISSING_PARAMETER, "snapshot_file"); qerror_report(QERR_MISSING_PARAMETER, "snapshot-file");
ret = -1; ret = -1;
goto out; goto out;
} }
......
...@@ -840,7 +840,7 @@ ETEXI ...@@ -840,7 +840,7 @@ ETEXI
{ {
.name = "snapshot_blkdev", .name = "snapshot_blkdev",
.args_type = "device:B,snapshot_file:s?,format:s?", .args_type = "device:B,snapshot-file:s?,format:s?",
.params = "device [new-image-file] [format]", .params = "device [new-image-file] [format]",
.help = "initiates a live snapshot\n\t\t\t" .help = "initiates a live snapshot\n\t\t\t"
"of device. If a new image file is specified, the\n\t\t\t" "of device. If a new image file is specified, the\n\t\t\t"
......
...@@ -691,6 +691,40 @@ Example: ...@@ -691,6 +691,40 @@ Example:
-> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } } -> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } }
<- { "return": {} } <- { "return": {} }
EQMP
{
.name = "blockdev-snapshot-sync",
.args_type = "device:B,snapshot-file:s?,format:s?",
.params = "device [new-image-file] [format]",
.user_print = monitor_user_noop,
.mhandler.cmd_new = do_snapshot_blkdev,
},
SQMP
blockdev-snapshot-sync
----------------------
Synchronous snapshot of a block device. snapshot-file specifies the
target of the new image. If the file exists, or if it is a device, the
snapshot will be created in the existing file/device. If does not
exist, a new file will be created. format specifies the format of the
snapshot image, default is qcow2.
Arguments:
- "device": device name to snapshot (json-string)
- "snapshot-file": name of new image file (json-string)
- "format": format of new image (json-string, optional)
Example:
-> { "execute": "blockdev-snapshot", "arguments": { "device": "ide-hd0",
"snapshot-file":
"/some/place/my-image",
"format": "qcow2" } }
<- { "return": {} }
EQMP EQMP
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册