From: Luiz Capitulino <lcapitulino@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 11/17] block: Convert bdrv_info() to QObject
Date: Mon, 23 Nov 2009 11:21:23 -0200 [thread overview]
Message-ID: <20091123112123.06338f41@doriath> (raw)
In-Reply-To: <m3tywpqoil.fsf@crossbow.pond.sub.org>
On Fri, 20 Nov 2009 15:06:26 +0100
Markus Armbruster <armbru@redhat.com> wrote:
> Luiz Capitulino <lcapitulino@redhat.com> writes:
>
> > Each block device information is stored in a QDict and the
> > returned QObject is a QList of all devices.
> >
> > This commit should not change user output.
> >
> > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> > ---
> > Makefile | 2 +-
> > block.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++----------
> > block.h | 4 +-
> > monitor.c | 3 +-
> > 4 files changed, 109 insertions(+), 23 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 6be75a1..3424cdb 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -80,7 +80,7 @@ qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
> > # block-obj-y is code used by both qemu system emulation and qemu-img
> >
> > block-obj-y = cutils.o cache-utils.o qemu-malloc.o qemu-option.o module.o
> > -block-obj-y += nbd.o block.o aio.o aes.o osdep.o
> > +block-obj-y += nbd.o block.o aio.o aes.o osdep.o $(qobject-obj-y)
> > block-obj-$(CONFIG_POSIX) += posix-aio-compat.o
> > block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o
> >
>
> Both $(block-obj-y) and $(qobject-obj-y) go into obj-y, which thus list
> all the $(qobject-obj-y) objects twice. Sure that's okay?
$(qobject-obj-y) is a dependency of qemu- block tools, it can be moved
there then.
> > diff --git a/block.c b/block.c
> > index 6fdabff..fc4e2f2 100644
> > --- a/block.c
> > +++ b/block.c
> > @@ -26,6 +26,7 @@
> > #include "monitor.h"
> > #include "block_int.h"
> > #include "module.h"
> > +#include "qemu-objects.h"
> >
> > #ifdef CONFIG_BSD
> > #include <sys/types.h>
> > @@ -1133,43 +1134,125 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
> > return bs->drv->bdrv_is_allocated(bs, sector_num, nb_sectors, pnum);
> > }
> >
> > -void bdrv_info(Monitor *mon)
> > +static void bdrv_print_dict(QObject *obj, void *opaque)
> > {
> > + QDict *bs_dict;
> > + Monitor *mon = opaque;
> > +
> > + bs_dict = qobject_to_qdict(obj);
> > +
> > + monitor_printf(mon, "%s: type=%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")) {
> > + monitor_printf(mon, " locked=%d", (int)qdict_get_bool(bs_dict, "locked"));
>
> qdict_get_bool() returns int, no need to cast.
Right.
> > + }
> > +
> > + if (qdict_haskey(bs_dict, "inserted")) {
> > + QDict *qdict = qobject_to_qdict(qdict_get(bs_dict, "inserted"));
> > +
> > + monitor_printf(mon, " file=");
> > + monitor_print_filename(mon, qdict_get_str(qdict, "file"));
> > + if (qdict_haskey(qdict, "backing_file")) {
> > + monitor_printf(mon, " backing_file=");
> > + monitor_print_filename(mon, qdict_get_str(qdict, "backing_file"));
> > + }
> > + monitor_printf(mon, " ro=%d drv=%s encrypted=%d",
> > + qdict_get_bool(qdict, "ro"),
> > + qdict_get_str(qdict, "drv"),
> > + qdict_get_bool(qdict, "encrypted"));
> > + } else {
> > + monitor_printf(mon, " [not inserted]");
> > + }
> > +
> > + monitor_printf(mon, "\n");
> > +}
> > +
> > +void bdrv_info_print(Monitor *mon, const QObject *data)
> > +{
> > + qlist_iter(qobject_to_qlist(data), bdrv_print_dict, mon);
> > +}
> > +
> > +/**
> > + * bdrv_info(): Block devices information
> > + *
> > + * Each block device information is stored in a QDict and the
> > + * returned QObject is a QList of all devices.
> > + *
> > + * The QDict contains the following:
> > + *
> > + * - "device": device name
> > + * - "type": device type
> > + * - "removable": 1 if the device is removable 0 otherwise
> > + * - "locked": 1 if the device is locked 0 otherwise
>
> Use above and example below suggest that "locked" is only present if
> device is removable. Document?
Yes.
> > + * - "inserted": only present if the device is inserted, it is a QDict
> > + * containing the following:
> > + * - "file": device file name
> > + * - "ro": 1 if read-only 0 otherwise
> > + * - "drv": driver format name
> > + * - "backing_file": backing file name if one is used
> > + * - "encrypted": 1 if encrypted 0 otherwise
> > + *
> > + * Example:
> > + *
> > + * [ { "device": "ide0-hd0", "type": "hd", "removable": 0,
> > + * "file": "/tmp/foobar", "ro": 0, "drv": "qcow2", "encrypted": 0 }
>
> Shouldn't "file" & friends ne in nested dictionary "inserted"?
Yes, will fix.
> > - monitor_printf(mon, " removable=%d", bs->removable);
> > - if (bs->removable) {
> > - monitor_printf(mon, " locked=%d", bs->locked);
> > - }
> > +
> > + bs_obj = qobject_from_jsonf("{ 'device': %s, 'type': %s, "
> > + "'removable': %i, 'locked': %i }",
> > + bs->device_name, type, bs->removable,
> > + bs->locked);
> > + assert(bs_obj != NULL);
>
> Failure modes of qobject_from_jsonf()? I'm asking because depending on
> the answer assert() may not be appropriate here.
As far as I know it will fail on wrong syntax.
next prev parent reply other threads:[~2009-11-23 13:21 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-17 20:32 [Qemu-devel] [PATCH v0 00/17]: info handlers conversions to QObject Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 01/17] Introduce qemu-objects.h header file Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 02/17] Makefile: move QObject objs to their own entry Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 03/17] QDict: Introduce qdict_get_qbool() Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 04/17] QDict: Introduce qdict_get_qlist() Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 05/17] monitor: Convert do_info_status() to QObject Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 06/17] monitor: Convert do_info_kvm() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 07/17] monitor: Convert do_info_name() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 08/17] monitor: Convert do_info_hpet() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 09/17] monitor: Convert do_info_uuid() " Luiz Capitulino
2009-11-20 13:38 ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 10/17] migration: Convert do_info_migrate() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 11/17] block: Convert bdrv_info() " Luiz Capitulino
2009-11-20 14:06 ` Markus Armbruster
2009-11-23 13:21 ` Luiz Capitulino [this message]
2009-11-23 15:34 ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 12/17] char: Convert qemu_chr_info() " Luiz Capitulino
2009-11-20 14:10 ` Markus Armbruster
2009-11-23 13:23 ` Luiz Capitulino
2009-11-23 15:39 ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 13/17] PCI: Convert pci_device_hot_add() " Luiz Capitulino
2009-11-20 14:21 ` Markus Armbruster
2009-11-23 9:44 ` [Qemu-devel] " Michael S. Tsirkin
2009-11-23 13:30 ` Luiz Capitulino
2009-11-30 10:31 ` Michael S. Tsirkin
2009-11-17 20:32 ` [Qemu-devel] [PATCH 14/17] block: Convert bdrv_info_stats() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 15/17] VNC: Convert do_info_vnc() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 16/17] net: Convert do_info_network() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 17/17] monitor: Convert do_info_mice() " Luiz Capitulino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091123112123.06338f41@doriath \
--to=lcapitulino@redhat.com \
--cc=armbru@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).