From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:49948) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QgXgr-0007TU-Cl for qemu-devel@nongnu.org; Tue, 12 Jul 2011 03:47:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QgXgo-0001ex-If for qemu-devel@nongnu.org; Tue, 12 Jul 2011 03:47:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:50759) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QgXgo-0001er-1d for qemu-devel@nongnu.org; Tue, 12 Jul 2011 03:47:30 -0400 From: Markus Armbruster References: <1309889871-6267-1-git-send-email-lcapitulino@redhat.com> <1309889871-6267-8-git-send-email-lcapitulino@redhat.com> Date: Tue, 12 Jul 2011 09:47:19 +0200 In-Reply-To: <1309889871-6267-8-git-send-email-lcapitulino@redhat.com> (Luiz Capitulino's message of "Tue, 5 Jul 2011 15:17:50 -0300") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: kwolf@redhat.com, jan.kiszka@siemens.com, jdenemar@redhat.com, qemu-devel@nongnu.org, stefanha@gmail.com Luiz Capitulino 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 > --- > 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?