Re: [Qemu-devel] [PATCH v2 08/10] block: Accept device model name for blockdev-change-medium

2016-09-19 Thread Eric Blake
On 09/19/2016 11:54 AM, Kevin Wolf wrote:
> In order to remove the necessity to use BlockBackend names in the
> external API, we want to allow qdev device names in all device related
> commands.
> 
> This converts blockdev-change-medium to accept a qdev device name.
> 
> Signed-off-by: Kevin Wolf 
> ---
>  blockdev.c   | 18 +++---
>  hmp.c|  5 +++--
>  qapi/block-core.json |  8 ++--
>  qmp-commands.hx  | 12 +++-
>  qmp.c|  4 ++--
>  5 files changed, 29 insertions(+), 18 deletions(-)
> 

Reviewed-by: Eric Blake 

-- 
Eric Blake   eblake redhat com+1-919-301-3266
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature


[Qemu-devel] [PATCH v2 08/10] block: Accept device model name for blockdev-change-medium

2016-09-19 Thread Kevin Wolf
In order to remove the necessity to use BlockBackend names in the
external API, we want to allow qdev device names in all device related
commands.

This converts blockdev-change-medium to accept a qdev device name.

Signed-off-by: Kevin Wolf 
---
 blockdev.c   | 18 +++---
 hmp.c|  5 +++--
 qapi/block-core.json |  8 ++--
 qmp-commands.hx  | 12 +++-
 qmp.c|  4 ++--
 5 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index 3d92724..8c8fcd6 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2540,7 +2540,9 @@ void qmp_x_blockdev_insert_medium(bool has_device, const 
char *device,
 qmp_blockdev_insert_anon_medium(blk, bs, errp);
 }
 
-void qmp_blockdev_change_medium(const char *device, const char *filename,
+void qmp_blockdev_change_medium(bool has_device, const char *device,
+bool has_id, const char *id,
+const char *filename,
 bool has_format, const char *format,
 bool has_read_only,
 BlockdevChangeReadOnlyMode read_only,
@@ -2553,10 +2555,10 @@ void qmp_blockdev_change_medium(const char *device, 
const char *filename,
 QDict *options = NULL;
 Error *err = NULL;
 
-blk = blk_by_name(device);
+blk = qmp_get_blk(has_device ? device : NULL,
+  has_id ? id : NULL,
+  errp);
 if (!blk) {
-error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
-  "Device '%s' not found", device);
 goto fail;
 }
 
@@ -2604,7 +2606,9 @@ void qmp_blockdev_change_medium(const char *device, const 
char *filename,
 goto fail;
 }
 
-rc = do_open_tray(device, NULL, false, );
+rc = do_open_tray(has_device ? device : NULL,
+  has_id ? id : NULL,
+  false, );
 if (rc && rc != -ENOSYS) {
 error_propagate(errp, err);
 goto fail;
@@ -2612,7 +2616,7 @@ void qmp_blockdev_change_medium(const char *device, const 
char *filename,
 error_free(err);
 err = NULL;
 
-qmp_x_blockdev_remove_medium(true, device, false, NULL, errp);
+qmp_x_blockdev_remove_medium(has_device, device, has_id, id, errp);
 if (err) {
 error_propagate(errp, err);
 goto fail;
@@ -2626,7 +2630,7 @@ void qmp_blockdev_change_medium(const char *device, const 
char *filename,
 
 blk_apply_root_state(blk, medium_bs);
 
-qmp_blockdev_close_tray(true, device, false, NULL, errp);
+qmp_blockdev_close_tray(has_device, device, has_id, id, errp);
 
 fail:
 /* If the medium has been inserted, the device has its own reference, so
diff --git a/hmp.c b/hmp.c
index 09827b3..336e7bf 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1422,8 +1422,9 @@ void hmp_change(Monitor *mon, const QDict *qdict)
 }
 }
 
-qmp_blockdev_change_medium(device, target, !!arg, arg,
-   !!read_only, read_only_mode, );
+qmp_blockdev_change_medium(true, device, false, NULL, target,
+   !!arg, arg, !!read_only, read_only_mode,
+   );
 if (err &&
 error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
 error_free(err);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index e370366..1d7d4cc 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2470,7 +2470,10 @@
 # combines blockdev-open-tray, x-blockdev-remove-medium,
 # x-blockdev-insert-medium and blockdev-close-tray).
 #
-# @device:  block device name
+# @device:  #optional Block device name (deprecated, use @id instead)
+#
+# @id:  #optional The name or QOM path of the guest device
+#   (since: 2.8)
 #
 # @filename:filename of the new image to be loaded
 #
@@ -2483,7 +2486,8 @@
 # Since: 2.5
 ##
 { 'command': 'blockdev-change-medium',
-  'data': { 'device': 'str',
+  'data': { '*device': 'str',
+'*id': 'str',
 'filename': 'str',
 '*format': 'str',
 '*read-only-mode': 'BlockdevChangeReadOnlyMode' } }
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 93904f8..cf1ffc5 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -4591,7 +4591,7 @@ EQMP
 
 {
 .name   = "blockdev-change-medium",
-.args_type  = "device:B,filename:F,format:s?,read-only-mode:s?",
+.args_type  = "device:B?,id:s?,filename:F,format:s?,read-only-mode:s?",
 .mhandler.cmd_new = qmp_marshal_blockdev_change_medium,
 },
 
@@ -4604,7 +4604,9 @@ and loading a new image file which is inserted as the new 
medium.
 
 Arguments:
 
-- "device": device name (json-string)
+- "device": block device name (deprecated, use @id instead)
+(json-string, optional)
+- "id": the name or QOM path of the guest device