[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 1/4] qmp: Introduce blockdev-change-medium
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v2 1/4] qmp: Introduce blockdev-change-medium |
Date: |
Fri, 5 Dec 2014 11:08:53 +0100 |
Introduce a new QMP command 'blockdev-change-medium' which is intended
to replace the 'change' command for block devices. The existing function
qmp_change_blockdev() is accordingly renamed to
qmp_blockdev_change_medium().
Signed-off-by: Max Reitz <address@hidden>
---
blockdev.c | 7 ++++---
include/sysemu/blockdev.h | 2 --
qapi/block-core.json | 21 +++++++++++++++++++++
qmp-commands.hx | 31 +++++++++++++++++++++++++++++++
qmp.c | 2 +-
5 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 5651a8e..e8947a5 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1768,8 +1768,9 @@ static void qmp_bdrv_open_encrypted(BlockDriverState *bs,
const char *filename,
}
}
-void qmp_change_blockdev(const char *device, const char *filename,
- const char *format, Error **errp)
+void qmp_blockdev_change_medium(const char *device, const char *filename,
+ bool has_format, const char *format,
+ Error **errp)
{
BlockBackend *blk;
BlockDriverState *bs;
@@ -1788,7 +1789,7 @@ void qmp_change_blockdev(const char *device, const char
*filename,
aio_context = bdrv_get_aio_context(bs);
aio_context_acquire(aio_context);
- if (format) {
+ if (has_format) {
drv = bdrv_find_whitelisted_format(format, bs->read_only);
if (!drv) {
error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
index 09d1e30..2a34332 100644
--- a/include/sysemu/blockdev.h
+++ b/include/sysemu/blockdev.h
@@ -65,8 +65,6 @@ DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType
block_default_type);
DriveInfo *add_init_drive(const char *opts);
-void qmp_change_blockdev(const char *device, const char *filename,
- const char *format, Error **errp);
void do_commit(Monitor *mon, const QDict *qdict);
int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
#endif
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 6e8db15..431517d 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1662,6 +1662,27 @@
##
+# @blockdev-change-medium:
+#
+# Changes the medium inserted into a block device by ejecting the current
medium
+# and loading a new image file which is inserted as the new medium.
+#
+# @device: block device name
+#
+# @filename: filename of the new image to be loaded
+#
+# @format: #optional, format to open the new image with (defaults to the
+# probed format)
+#
+# Since: 2.3
+##
+{ 'command': 'blockdev-change-medium',
+ 'data': { 'device': 'str',
+ 'filename': 'str',
+ '*format': 'str' } }
+
+
+##
# @BlockErrorAction
#
# An enumeration of action that has been taken when a DISK I/O occurs
diff --git a/qmp-commands.hx b/qmp-commands.hx
index d4b0010..3f1f2eb 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3646,6 +3646,37 @@ Example:
EQMP
{
+ .name = "blockdev-change-medium",
+ .args_type = "device:B,filename:F,format:s?",
+ .mhandler.cmd_new = qmp_marshal_input_blockdev_change_medium,
+ },
+
+SQMP
+blockdev-change-medium
+----------------------
+
+Changes the medium inserted into a block device by ejecting the current medium
+and loading a new image file which is inserted as the new medium.
+
+Arguments:
+
+- "device": device name (json-string)
+- "filename": filename of the new image (json-string)
+- "format": format of the new image (json-string, optional)
+
+Examples:
+
+1. Change a removable medium
+
+-> { "execute": "blockdev-change-medium",
+ "arguments": { "device": "ide1-cd0",
+ "filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
+ "format": "raw" } }
+<- { "return": {} }
+
+EQMP
+
+ {
.name = "query-memdev",
.args_type = "",
.mhandler.cmd_new = qmp_marshal_input_query_memdev,
diff --git a/qmp.c b/qmp.c
index 0b4f131..59fc6f7 100644
--- a/qmp.c
+++ b/qmp.c
@@ -402,7 +402,7 @@ void qmp_change(const char *device, const char *target,
if (strcmp(device, "vnc") == 0) {
qmp_change_vnc(target, has_arg, arg, errp);
} else {
- qmp_change_blockdev(device, target, arg, errp);
+ qmp_blockdev_change_medium(device, target, has_arg, arg, errp);
}
}
--
1.9.3
[Qemu-devel] [PATCH v2 4/4] hmp: Add read-only option to change command, Max Reitz, 2014/12/05
Re: [Qemu-devel] [PATCH v2 0/4] blockdev: Add blockdev-change-medium with read-only option, Eric Blake, 2014/12/05
Re: [Qemu-devel] [PATCH v2 0/4] blockdev: Add blockdev-change-medium with read-only option, Markus Armbruster, 2014/12/05