Re: [Qemu-block] [PATCH v2 09/10] block: Accept device model name for block_set_io_throttle

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 block_set_io_throttle to accept a qdev device name.
> 
> Signed-off-by: Kevin Wolf 
> ---
>  blockdev.c   | 12 +++-
>  qapi/block-core.json |  8 +---
>  qmp-commands.hx  |  8 +---
>  3 files changed, 17 insertions(+), 11 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-block] [PATCH v2 09/10] block: Accept device model name for block_set_io_throttle

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 block_set_io_throttle to accept a qdev device name.

Signed-off-by: Kevin Wolf 
---
 blockdev.c   | 12 +++-
 qapi/block-core.json |  8 +---
 qmp-commands.hx  |  8 +---
 3 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index 8c8fcd6..405145a 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2647,10 +2647,10 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, 
Error **errp)
 BlockBackend *blk;
 AioContext *aio_context;
 
-blk = blk_by_name(arg->device);
+blk = qmp_get_blk(arg->has_device ? arg->device : NULL,
+  arg->has_id ? arg->id : NULL,
+  errp);
 if (!blk) {
-error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
-  "Device '%s' not found", arg->device);
 return;
 }
 
@@ -2659,7 +2659,7 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, 
Error **errp)
 
 bs = blk_bs(blk);
 if (!bs) {
-error_setg(errp, "Device '%s' has no medium", arg->device);
+error_setg(errp, "Device has no medium");
 goto out;
 }
 
@@ -2723,7 +2723,9 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, 
Error **errp)
  * just update the throttling group. */
 if (!blk_get_public(blk)->throttle_state) {
 blk_io_limits_enable(blk,
- arg->has_group ? arg->group : arg->device);
+ arg->has_group ? arg->group :
+ arg->has_device ? arg->device :
+ arg->id);
 } else if (arg->has_group) {
 blk_io_limits_update_group(blk, arg->group);
 }
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 1d7d4cc..5f04dab 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1377,7 +1377,9 @@
 #
 # A set of parameters describing block throttling.
 #
-# @device: The name of the device
+# @device: #optional Block device name (deprecated, use @id instead)
+#
+# @id: #optional The name or QOM path of the guest device (since: 2.8)
 #
 # @bps: total throughput limit in bytes per second
 #
@@ -1446,8 +1448,8 @@
 # Since: 1.1
 ##
 { 'struct': 'BlockIOThrottle',
-  'data': { 'device': 'str', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
-'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
+  'data': { '*device': 'str', '*id': 'str', 'bps': 'int', 'bps_rd': 'int',
+'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
 '*bps_max': 'int', '*bps_rd_max': 'int',
 '*bps_wr_max': 'int', '*iops_max': 'int',
 '*iops_rd_max': 'int', '*iops_wr_max': 'int',
diff --git a/qmp-commands.hx b/qmp-commands.hx
index cf1ffc5..9b8696c 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2084,7 +2084,7 @@ EQMP
 
 {
 .name   = "block_set_io_throttle",
-.args_type  = 
"device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l,bps_max:l?,bps_rd_max:l?,bps_wr_max:l?,iops_max:l?,iops_rd_max:l?,iops_wr_max:l?,bps_max_length:l?,bps_rd_max_length:l?,bps_wr_max_length:l?,iops_max_length:l?,iops_rd_max_length:l?,iops_wr_max_length:l?,iops_size:l?,group:s?",
+.args_type  = 
"device:B?,id:s?,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l,bps_max:l?,bps_rd_max:l?,bps_wr_max:l?,iops_max:l?,iops_rd_max:l?,iops_wr_max:l?,bps_max_length:l?,bps_rd_max_length:l?,bps_wr_max_length:l?,iops_max_length:l?,iops_rd_max_length:l?,iops_wr_max_length:l?,iops_size:l?,group:s?",
 .mhandler.cmd_new = qmp_marshal_block_set_io_throttle,
 },
 
@@ -2096,7 +2096,9 @@ Change I/O throttle limits for a block drive.
 
 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 (json-string, optional)
 - "bps": total throughput limit in bytes per second (json-int)
 - "bps_rd": read throughput limit in bytes per second (json-int)
 - "bps_wr": write throughput limit in bytes per second (json-int)
@@ -2120,7 +2122,7 @@ Arguments:
 
 Example:
 
--> { "execute": "block_set_io_throttle", "arguments": { "device": "virtio0",
+-> { "execute": "block_set_io_throttle", "arguments": { "id": "ide0-1-0",
"bps": 100,
"bps_rd": 0,
"bps_wr": 0,
-- 
1.8.3.1