Re: [Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key
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
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
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