Re: [Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key

2011-07-12 Thread Markus Armbruster
Luiz Capitulino lcapitul...@redhat.com writes:

 Contains the last I/O status for the given device. Currently this is
 only supported by ide, scsi and virtio block devices.

 Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
 ---
  block.c |   15 ++-
  block.h |2 +-
  qmp-commands.hx |6 ++
  3 files changed, 21 insertions(+), 2 deletions(-)

 diff --git a/block.c b/block.c
 index cc0a34e..28df3d8 100644
 --- a/block.c
 +++ b/block.c
 @@ -1720,6 +1720,12 @@ void bdrv_info_print(Monitor *mon, const QObject *data)
  qlist_iter(qobject_to_qlist(data), bdrv_print_dict, mon);
  }
  
 +static const char *const io_status_name[BDRV_IOS_MAX] = {
 +[BDRV_IOS_OK] = ok,
 +[BDRV_IOS_FAILED] = failed,
 +[BDRV_IOS_ENOSPC] = nospace,
 +};
 +
  void bdrv_info(Monitor *mon, QObject **ret_data)
  {
  QList *bs_list;
 @@ -1729,15 +1735,16 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
  
  QTAILQ_FOREACH(bs, bdrv_states, list) {
  QObject *bs_obj;
 +QDict *bs_dict;
  
  bs_obj = qobject_from_jsonf({ 'device': %s, 'type': 'unknown', 
  'removable': %i, 'locked': %i },
  bs-device_name, bs-removable,
  bs-locked);
 +bs_dict = qobject_to_qdict(bs_obj);
  
  if (bs-drv) {
  QObject *obj;
 -QDict *bs_dict = qobject_to_qdict(bs_obj);
  
  obj = qobject_from_jsonf({ 'file': %s, 'ro': %i, 'drv': %s, 
   'encrypted': %i },
 @@ -1752,6 +1759,12 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
  
  qdict_put_obj(bs_dict, inserted, obj);
  }
 +
 +if (bs-iostatus_enabled) {
 +qdict_put(bs_dict, io-status,
 +  qstring_from_str(io_status_name[bs-iostatus]));
 +}
 +
  qlist_append_obj(bs_list, bs_obj);
  }
  
 diff --git a/block.h b/block.h
 index 0dca1bb..0141fe6 100644
 --- a/block.h
 +++ b/block.h
 @@ -51,7 +51,7 @@ typedef enum {
  } BlockMonEventAction;
  
  typedef enum {
 -BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC
 +BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC, BDRV_IOS_MAX
  } BlockIOStatus;
  
  void bdrv_iostatus_update(BlockDriverState *bs, int error);
 diff --git a/qmp-commands.hx b/qmp-commands.hx
 index 6b8eb0a..1746b6d 100644
 --- a/qmp-commands.hx
 +++ b/qmp-commands.hx
 @@ -1082,6 +1082,9 @@ Each json-object contain the following:
  tftp, vdi, vmdk, vpc, vvfat
   - backing_file: backing file name (json-string, optional)
   - encrypted: true if encrypted, false otherwise (json-bool)
 +- io-status: last executed I/O operation status, only present if the device
 +   supports it (json_string, optional)
 + - Possible values: ok, failed, nospace
  
  Example:
  
 @@ -1089,6 +1092,7 @@ Example:
  - {
return:[
   {
 +io-status: ok,
  device:ide0-hd0,
  locked:false,
  removable:false,
 @@ -1101,12 +1105,14 @@ Example:
  type:unknown
   },
   {
 +io-status: ok,
  device:ide1-cd0,
  locked:false,
  removable:true,
  type:unknown
   },
   {
 +io-status: ok,
  device:floppy0,
  locked:false,
  removable:true,

floppy doesn't support I/O status, yet the example shows io-status:
ok.  Are you sure it's correct?



Re: [Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key

2011-07-12 Thread Luiz Capitulino
On Tue, 12 Jul 2011 09:47:19 +0200
Markus Armbruster arm...@redhat.com wrote:

 Luiz Capitulino lcapitul...@redhat.com writes:
 
  Contains the last I/O status for the given device. Currently this is
  only supported by ide, scsi and virtio block devices.
 
  Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
  ---
   block.c |   15 ++-
   block.h |2 +-
   qmp-commands.hx |6 ++
   3 files changed, 21 insertions(+), 2 deletions(-)
 
  diff --git a/block.c b/block.c
  index cc0a34e..28df3d8 100644
  --- a/block.c
  +++ b/block.c
  @@ -1720,6 +1720,12 @@ void bdrv_info_print(Monitor *mon, const QObject 
  *data)
   qlist_iter(qobject_to_qlist(data), bdrv_print_dict, mon);
   }
   
  +static const char *const io_status_name[BDRV_IOS_MAX] = {
  +[BDRV_IOS_OK] = ok,
  +[BDRV_IOS_FAILED] = failed,
  +[BDRV_IOS_ENOSPC] = nospace,
  +};
  +
   void bdrv_info(Monitor *mon, QObject **ret_data)
   {
   QList *bs_list;
  @@ -1729,15 +1735,16 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
   
   QTAILQ_FOREACH(bs, bdrv_states, list) {
   QObject *bs_obj;
  +QDict *bs_dict;
   
   bs_obj = qobject_from_jsonf({ 'device': %s, 'type': 'unknown', 
   'removable': %i, 'locked': %i },
   bs-device_name, bs-removable,
   bs-locked);
  +bs_dict = qobject_to_qdict(bs_obj);
   
   if (bs-drv) {
   QObject *obj;
  -QDict *bs_dict = qobject_to_qdict(bs_obj);
   
   obj = qobject_from_jsonf({ 'file': %s, 'ro': %i, 'drv': %s, 
'encrypted': %i },
  @@ -1752,6 +1759,12 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
   
   qdict_put_obj(bs_dict, inserted, obj);
   }
  +
  +if (bs-iostatus_enabled) {
  +qdict_put(bs_dict, io-status,
  +  qstring_from_str(io_status_name[bs-iostatus]));
  +}
  +
   qlist_append_obj(bs_list, bs_obj);
   }
   
  diff --git a/block.h b/block.h
  index 0dca1bb..0141fe6 100644
  --- a/block.h
  +++ b/block.h
  @@ -51,7 +51,7 @@ typedef enum {
   } BlockMonEventAction;
   
   typedef enum {
  -BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC
  +BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC, BDRV_IOS_MAX
   } BlockIOStatus;
   
   void bdrv_iostatus_update(BlockDriverState *bs, int error);
  diff --git a/qmp-commands.hx b/qmp-commands.hx
  index 6b8eb0a..1746b6d 100644
  --- a/qmp-commands.hx
  +++ b/qmp-commands.hx
  @@ -1082,6 +1082,9 @@ Each json-object contain the following:
   tftp, vdi, vmdk, vpc, vvfat
- backing_file: backing file name (json-string, optional)
- encrypted: true if encrypted, false otherwise (json-bool)
  +- io-status: last executed I/O operation status, only present if the 
  device
  +   supports it (json_string, optional)
  + - Possible values: ok, failed, nospace
   
   Example:
   
  @@ -1089,6 +1092,7 @@ Example:
   - {
 return:[
{
  +io-status: ok,
   device:ide0-hd0,
   locked:false,
   removable:false,
  @@ -1101,12 +1105,14 @@ Example:
   type:unknown
},
{
  +io-status: ok,
   device:ide1-cd0,
   locked:false,
   removable:true,
   type:unknown
},
{
  +io-status: ok,
   device:floppy0,
   locked:false,
   removable:true,
 
 floppy doesn't support I/O status, yet the example shows io-status:
 ok.  Are you sure it's correct?

Good catch, I did this by hand :-)



[Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key

2011-07-05 Thread Luiz Capitulino
Contains the last I/O status for the given device. Currently this is
only supported by ide, scsi and virtio block devices.

Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
---
 block.c |   15 ++-
 block.h |2 +-
 qmp-commands.hx |6 ++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/block.c b/block.c
index cc0a34e..28df3d8 100644
--- a/block.c
+++ b/block.c
@@ -1720,6 +1720,12 @@ void bdrv_info_print(Monitor *mon, const QObject *data)
 qlist_iter(qobject_to_qlist(data), bdrv_print_dict, mon);
 }
 
+static const char *const io_status_name[BDRV_IOS_MAX] = {
+[BDRV_IOS_OK] = ok,
+[BDRV_IOS_FAILED] = failed,
+[BDRV_IOS_ENOSPC] = nospace,
+};
+
 void bdrv_info(Monitor *mon, QObject **ret_data)
 {
 QList *bs_list;
@@ -1729,15 +1735,16 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
 
 QTAILQ_FOREACH(bs, bdrv_states, list) {
 QObject *bs_obj;
+QDict *bs_dict;
 
 bs_obj = qobject_from_jsonf({ 'device': %s, 'type': 'unknown', 
 'removable': %i, 'locked': %i },
 bs-device_name, bs-removable,
 bs-locked);
+bs_dict = qobject_to_qdict(bs_obj);
 
 if (bs-drv) {
 QObject *obj;
-QDict *bs_dict = qobject_to_qdict(bs_obj);
 
 obj = qobject_from_jsonf({ 'file': %s, 'ro': %i, 'drv': %s, 
  'encrypted': %i },
@@ -1752,6 +1759,12 @@ void bdrv_info(Monitor *mon, QObject **ret_data)
 
 qdict_put_obj(bs_dict, inserted, obj);
 }
+
+if (bs-iostatus_enabled) {
+qdict_put(bs_dict, io-status,
+  qstring_from_str(io_status_name[bs-iostatus]));
+}
+
 qlist_append_obj(bs_list, bs_obj);
 }
 
diff --git a/block.h b/block.h
index 0dca1bb..0141fe6 100644
--- a/block.h
+++ b/block.h
@@ -51,7 +51,7 @@ typedef enum {
 } BlockMonEventAction;
 
 typedef enum {
-BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC
+BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC, BDRV_IOS_MAX
 } BlockIOStatus;
 
 void bdrv_iostatus_update(BlockDriverState *bs, int error);
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 6b8eb0a..1746b6d 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -1082,6 +1082,9 @@ Each json-object contain the following:
 tftp, vdi, vmdk, vpc, vvfat
  - backing_file: backing file name (json-string, optional)
  - encrypted: true if encrypted, false otherwise (json-bool)
+- io-status: last executed I/O operation status, only present if the device
+   supports it (json_string, optional)
+ - Possible values: ok, failed, nospace
 
 Example:
 
@@ -1089,6 +1092,7 @@ Example:
 - {
   return:[
  {
+io-status: ok,
 device:ide0-hd0,
 locked:false,
 removable:false,
@@ -1101,12 +1105,14 @@ Example:
 type:unknown
  },
  {
+io-status: ok,
 device:ide1-cd0,
 locked:false,
 removable:true,
 type:unknown
  },
  {
+io-status: ok,
 device:floppy0,
 locked:false,
 removable:true,
-- 
1.7.6.131.g99019