Patchwork [4/8] block QMP: Drop query-block member "type" (type= in info block)

login
register
mail settings
Submitter Markus Armbruster
Date July 6, 2010, 12:37 p.m.
Message ID <1278419869-26126-5-git-send-email-armbru@redhat.com>
Download mbox | patch
Permalink /patch/58017/
State New
Headers show

Comments

Markus Armbruster - July 6, 2010, 12:37 p.m.
Its value is unreliable: a block device used as floppy has type
"floppy" if created with if=floppy, but type "hd" if created with
if=none.

That's because with if=none, the type is at best a declaration of
intent: the drive can be connected to any guest device.  Its type is
really the guest device's business.  Reporting it here is wrong.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 block.c         |   20 +++-----------------
 qemu-monitor.hx |    6 ------
 2 files changed, 3 insertions(+), 23 deletions(-)
Kevin Wolf - July 6, 2010, 4:39 p.m.
Am 06.07.2010 14:37, schrieb Markus Armbruster:
> Its value is unreliable: a block device used as floppy has type
> "floppy" if created with if=floppy, but type "hd" if created with
> if=none.
> 
> That's because with if=none, the type is at best a declaration of
> intent: the drive can be connected to any guest device.  Its type is
> really the guest device's business.  Reporting it here is wrong.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Dan, I'd like to have your Acked-by for this patch before applying it.
Can libvirt handle such a change in the monitor output, or does it even
use info block?

Kevin

> ---
>  block.c         |   20 +++-----------------
>  qemu-monitor.hx |    6 ------
>  2 files changed, 3 insertions(+), 23 deletions(-)
> 
> diff --git a/block.c b/block.c
> index 65cf4dc..6d419b9 100644
> --- a/block.c
> +++ b/block.c
> @@ -1533,9 +1533,8 @@ static void bdrv_print_dict(QObject *obj, void *opaque)
>  
>      bs_dict = qobject_to_qdict(obj);
>  
> -    monitor_printf(mon, "%s: type=%s removable=%d",
> +    monitor_printf(mon, "%s: removable=%d",
>                          qdict_get_str(bs_dict, "device"),
> -                        qdict_get_str(bs_dict, "type"),
>                          qdict_get_bool(bs_dict, "removable"));
>  
>      if (qdict_get_bool(bs_dict, "removable")) {
> @@ -1576,23 +1575,10 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
>  
>      QTAILQ_FOREACH(bs, &bdrv_states, list) {
>          QObject *bs_obj;
> -        const char *type = "unknown";
> -
> -        switch(bs->type) {
> -        case BDRV_TYPE_HD:
> -            type = "hd";
> -            break;
> -        case BDRV_TYPE_CDROM:
> -            type = "cdrom";
> -            break;
> -        case BDRV_TYPE_FLOPPY:
> -            type = "floppy";
> -            break;
> -        }
>  
> -        bs_obj = qobject_from_jsonf("{ 'device': %s, 'type': %s, "
> +        bs_obj = qobject_from_jsonf("{ 'device': %s, "
>                                      "'removable': %i, 'locked': %i }",
> -                                    bs->device_name, type, bs->removable,
> +                                    bs->device_name, bs->removable,
>                                      bs->locked);
>  
>          if (bs->drv) {
> diff --git a/qemu-monitor.hx b/qemu-monitor.hx
> index 9f62b94..6ba8abc 100644
> --- a/qemu-monitor.hx
> +++ b/qemu-monitor.hx
> @@ -1723,8 +1723,6 @@ is a json-array of all devices.
>  Each json-object contain the following:
>  
>  - "device": device name (json-string)
> -- "type": device type (json-string)
> -         - Possible values: "hd", "cdrom", "floppy", "unknown"
>  - "removable": true if the device is removable, false otherwise (json-bool)
>  - "locked": true if the device is locked, false otherwise (json-bool)
>  - "inserted": only present if the device is inserted, it is a json-object
> @@ -1755,25 +1753,21 @@ Example:
>                 "encrypted":false,
>                 "file":"disks/test.img"
>              },
> -            "type":"hd"
>           },
>           {
>              "device":"ide1-cd0",
>              "locked":false,
>              "removable":true,
> -            "type":"cdrom"
>           },
>           {
>              "device":"floppy0",
>              "locked":false,
>              "removable":true,
> -            "type": "floppy"
>           },
>           {
>              "device":"sd0",
>              "locked":false,
>              "removable":true,
> -            "type":"floppy"
>           }
>        ]
>     }
Daniel P. Berrange - July 6, 2010, 4:45 p.m.
On Tue, Jul 06, 2010 at 06:39:53PM +0200, Kevin Wolf wrote:
> Am 06.07.2010 14:37, schrieb Markus Armbruster:
> > Its value is unreliable: a block device used as floppy has type
> > "floppy" if created with if=floppy, but type "hd" if created with
> > if=none.
> > 
> > That's because with if=none, the type is at best a declaration of
> > intent: the drive can be connected to any guest device.  Its type is
> > really the guest device's business.  Reporting it here is wrong.
> > 
> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
> 
> Dan, I'd like to have your Acked-by for this patch before applying it.
> Can libvirt handle such a change in the monitor output, or does it even
> use info block?

We don't use the 'info block' or query-block commands at this
point in time, only 'info blockstats'/'query-blockstats'. So 
it should be fine to drop this field from libvirt's POV.

Regards,
Daniel
Christoph Hellwig - July 7, 2010, 1:33 a.m.
Looks correct to me,


Reviewed-by: Christoph Hellwig <hch@lst.de>

Patch

diff --git a/block.c b/block.c
index 65cf4dc..6d419b9 100644
--- a/block.c
+++ b/block.c
@@ -1533,9 +1533,8 @@  static void bdrv_print_dict(QObject *obj, void *opaque)
 
     bs_dict = qobject_to_qdict(obj);
 
-    monitor_printf(mon, "%s: type=%s removable=%d",
+    monitor_printf(mon, "%s: removable=%d",
                         qdict_get_str(bs_dict, "device"),
-                        qdict_get_str(bs_dict, "type"),
                         qdict_get_bool(bs_dict, "removable"));
 
     if (qdict_get_bool(bs_dict, "removable")) {
@@ -1576,23 +1575,10 @@  void bdrv_info(Monitor *mon, QObject **ret_data)
 
     QTAILQ_FOREACH(bs, &bdrv_states, list) {
         QObject *bs_obj;
-        const char *type = "unknown";
-
-        switch(bs->type) {
-        case BDRV_TYPE_HD:
-            type = "hd";
-            break;
-        case BDRV_TYPE_CDROM:
-            type = "cdrom";
-            break;
-        case BDRV_TYPE_FLOPPY:
-            type = "floppy";
-            break;
-        }
 
-        bs_obj = qobject_from_jsonf("{ 'device': %s, 'type': %s, "
+        bs_obj = qobject_from_jsonf("{ 'device': %s, "
                                     "'removable': %i, 'locked': %i }",
-                                    bs->device_name, type, bs->removable,
+                                    bs->device_name, bs->removable,
                                     bs->locked);
 
         if (bs->drv) {
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 9f62b94..6ba8abc 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1723,8 +1723,6 @@  is a json-array of all devices.
 Each json-object contain the following:
 
 - "device": device name (json-string)
-- "type": device type (json-string)
-         - Possible values: "hd", "cdrom", "floppy", "unknown"
 - "removable": true if the device is removable, false otherwise (json-bool)
 - "locked": true if the device is locked, false otherwise (json-bool)
 - "inserted": only present if the device is inserted, it is a json-object
@@ -1755,25 +1753,21 @@  Example:
                "encrypted":false,
                "file":"disks/test.img"
             },
-            "type":"hd"
          },
          {
             "device":"ide1-cd0",
             "locked":false,
             "removable":true,
-            "type":"cdrom"
          },
          {
             "device":"floppy0",
             "locked":false,
             "removable":true,
-            "type": "floppy"
          },
          {
             "device":"sd0",
             "locked":false,
             "removable":true,
-            "type":"floppy"
          }
       ]
    }