All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: aliguori@us.ibm.com, stefanha@gmail.com, qemu-devel@nongnu.org,
	lcapitulino@redhat.com, pbonzini@redhat.com, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH V10 11/17] qmp: add ImageInfo in BlockDeviceInfo used by query-block
Date: Fri, 29 Mar 2013 10:35:48 +0800	[thread overview]
Message-ID: <5154FE04.5020506@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130328095412.GA3077@dhcp-200-207.str.redhat.com>

于 2013-3-28 17:54, Kevin Wolf 写道:
> Am 22.03.2013 um 15:19 hat Wenchao Xia geschrieben:
>>    Now image info will be retrieved as an embbed json object inside
>> BlockDeviceInfo, backing chain info and all related internal snapshot
>> info can be got in the enhanced recursive structure of ImageInfo.
>>
>> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
>> ---
>>   block/qapi.c         |   39 ++++++++++++++++++++++++++--
>>   include/block/qapi.h |    4 ++-
>>   qapi-schema.json     |    5 +++-
>>   qmp-commands.hx      |   67 +++++++++++++++++++++++++++++++++++++++++++++++++-
>>   4 files changed, 109 insertions(+), 6 deletions(-)
>>
>> diff --git a/block/qapi.c b/block/qapi.c
>> index df73f5b..9051947 100644
>> --- a/block/qapi.c
>> +++ b/block/qapi.c
>> @@ -200,9 +200,15 @@ int bdrv_query_image_info(BlockDriverState *bs,
>>       return 0;
>>   }
>>
>> -BlockInfo *bdrv_query_info(BlockDriverState *bs)
>> +/* return 0 on success, and @p_info will be set only on success. */
>> +int bdrv_query_info(BlockDriverState *bs,
>> +                    BlockInfo **p_info,
>> +                    Error **errp)
>>   {
>>       BlockInfo *info = g_malloc0(sizeof(*info));
>> +    BlockDriverState *bs0;
>> +    ImageInfo **p_image_info;
>> +    int ret = 0;
>
> ret is never changed, so this function always returns 0. I would suggest
> to drop ret and make the function return type void.
>
   My bad, I forgot to set its value, the interface is intend to return
negative error number and errp both on fail.

>>       info->device = g_strdup(bs->device_name);
>>       info->type = g_strdup("unknown");
>>       info->locked = bdrv_dev_is_medium_locked(bs);
>> @@ -256,8 +262,29 @@ BlockInfo *bdrv_query_info(BlockDriverState *bs)
>>               info->inserted->iops_wr =
>>                              bs->io_limits.iops[BLOCK_IO_LIMIT_WRITE];
>>           }
>> +
>> +        bs0 = bs;
>> +        p_image_info = &info->inserted->image;
>> +        while (1) {
>> +            if (bdrv_query_image_info(bs0, p_image_info, errp)) {
>> +                goto err;
>> +            }
   Sorry ret is missing here, it should be:
             ret = bdrv_query_image_info(bs0, p_image_info, errp));
             if (ret) {
                 goto err;
             }
   I'll correct it.

>> +            if (bs0->drv && bs0->backing_hd) {
>> +                bs0 = bs0->backing_hd;
>> +                (*p_image_info)->has_backing_image = true;
>> +                p_image_info = &((*p_image_info)->backing_image);
>> +            } else {
>> +                break;
>> +            }
>> +        }
>>       }
>> -    return info;
>> +
>> +    *p_info = info;
>> +    return 0;
>> +
>> + err:
>> +    qapi_free_BlockInfo(info);
>> +    return ret;
>>   }
>>
>>   SnapshotInfoList *qmp_query_snapshots(Error **errp)
>> @@ -284,11 +311,17 @@ BlockInfoList *qmp_query_block(Error **errp)
>>
>>       while ((bs = bdrv_next(bs))) {
>>           BlockInfoList *info = g_malloc0(sizeof(*info));
>> -        info->value = bdrv_query_info(bs);
>> +        if (bdrv_query_info(bs, &info->value, errp)) {
>> +            goto err;
>> +        }
>
> Consequently, you've got the error handling wrong here, the if condition
> is never true. It should look more or less like this (the syntax details
> may be wrong):
>
> Error *local_err;
> bdrv_query_info(bs, &info->value, &local_err);
> if (error_is_set(local_err)) {
>      error_propagate(err, local_err);
>      goto err;
> }
>
> Kevin
>


-- 
Best Regards

Wenchao Xia

  reply	other threads:[~2013-03-29  2:36 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-22 14:18 [Qemu-devel] [PATCH V10 00/17] qmp/hmp interfaces for internal snapshot info Wenchao Xia
2013-03-22 14:18 ` [Qemu-devel] [PATCH V10 01/17] block: move bdrv_snapshot_find() to block/snapshot.c Wenchao Xia
2013-03-22 14:18 ` [Qemu-devel] [PATCH V10 02/17] block: distinguish id and name in bdrv_find_snapshot() Wenchao Xia
2013-03-22 14:18 ` [Qemu-devel] [PATCH V10 03/17] qemu-img: remove unused parameter in collect_image_info() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 04/17] block: move collect_snapshots() and collect_image_info() to block/qapi.c Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 05/17] block: add snapshot info query function bdrv_query_snapshot_info_list() Wenchao Xia
2013-03-27 21:31   ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 06/17] block: add check for VM snapshot in bdrv_query_snapshot_info_list() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 07/17] block: add image info query function bdrv_query_image_info() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 08/17] block: move qmp_query_block() and bdrv_query_info() to block/qapi.c Wenchao Xia
2013-03-29 20:10   ` Eric Blake
2013-03-30 12:32     ` Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 09/17] qmp: add interface query-snapshots Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 10/17] qmp: add recursive member in ImageInfo Wenchao Xia
2013-03-29 22:54   ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 11/17] qmp: add ImageInfo in BlockDeviceInfo used by query-block Wenchao Xia
2013-03-28  9:54   ` Kevin Wolf
2013-03-29  2:35     ` Wenchao Xia [this message]
2013-04-02  8:09       ` Kevin Wolf
2013-04-02  8:54         ` Wenchao Xia
2013-04-02  9:30           ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 12/17] hmp: add function hmp_info_snapshots() Wenchao Xia
2013-03-29 23:04   ` Eric Blake
2013-03-30 12:38     ` Wenchao Xia
2013-04-02  7:39       ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 13/17] hmp: switch snapshot info function to qmp based one Wenchao Xia
2013-04-01 15:56   ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 14/17] block: move dump_human_image_info() to block/qapi.c Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 15/17] block: dump to buffer for bdrv_image_info_dump() Wenchao Xia
2013-04-01 19:17   ` Eric Blake
2013-04-02  2:42     ` Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 16/17] hmp: show ImageInfo in 'info block' Wenchao Xia
2013-03-28 11:06   ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 17/17] hmp: add parameter device and -b for info block Wenchao Xia
2013-03-28 11:09   ` Kevin Wolf
2013-03-29  2:48     ` Wenchao Xia
2013-04-02  7:46       ` Kevin Wolf
2013-03-28 11:10 ` [Qemu-devel] [PATCH V10 00/17] qmp/hmp interfaces for internal snapshot info Kevin Wolf

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=5154FE04.5020506@linux.vnet.ibm.com \
    --to=xiawenc@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.