[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-block] [PATCH 03/34] quorum: Use bdrv_open_image(
From: |
Jeff Cody |
Subject: |
Re: [Qemu-devel] [Qemu-block] [PATCH 03/34] quorum: Use bdrv_open_image() |
Date: |
Tue, 12 May 2015 15:07:18 -0400 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Fri, May 08, 2015 at 07:21:35PM +0200, Kevin Wolf wrote:
> Besides standardising on a single interface for opening child nodes,
> this simplifies the .bdrv_open() implementation of the quorum block
> driver by using block layer functionality for handling BlockdevRefs.
>
> Signed-off-by: Kevin Wolf <address@hidden>
> ---
> block/quorum.c | 51 +++++++++++----------------------------------------
> 1 file changed, 11 insertions(+), 40 deletions(-)
>
> diff --git a/block/quorum.c b/block/quorum.c
> index f91ef75..a33881a 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -866,25 +866,18 @@ static int quorum_open(BlockDriverState *bs, QDict
> *options, int flags,
> Error *local_err = NULL;
> QemuOpts *opts = NULL;
> bool *opened;
> - QDict *sub = NULL;
> - QList *list = NULL;
> - const QListEntry *lentry;
> int i;
> int ret = 0;
>
> qdict_flatten(options);
> - qdict_extract_subqdict(options, &sub, "children.");
> - qdict_array_split(sub, &list);
>
> - if (qdict_size(sub)) {
> - error_setg(&local_err, "Invalid option children.%s",
> - qdict_first(sub)->key);
> + /* count how many different children are present */
> + s->num_children = qdict_array_entries(options, "children.");
> + if (s->num_children < 0) {
> + error_setg(&local_err, "Option children is not a valid array");
> ret = -EINVAL;
> goto exit;
> }
> -
> - /* count how many different children are present */
> - s->num_children = qlist_size(list);
> if (s->num_children < 2) {
> error_setg(&local_err,
> "Number of provided children must be greater than 1");
> @@ -937,37 +930,17 @@ static int quorum_open(BlockDriverState *bs, QDict
> *options, int flags,
> s->bs = g_new0(BlockDriverState *, s->num_children);
> opened = g_new0(bool, s->num_children);
>
> - for (i = 0, lentry = qlist_first(list); lentry;
> - lentry = qlist_next(lentry), i++) {
> - QDict *d;
> - QString *string;
> -
> - switch (qobject_type(lentry->value))
> - {
> - /* List of options */
> - case QTYPE_QDICT:
> - d = qobject_to_qdict(lentry->value);
> - QINCREF(d);
> - ret = bdrv_open(&s->bs[i], NULL, NULL, d, flags, NULL,
> - &local_err);
> - break;
> -
> - /* QMP reference */
> - case QTYPE_QSTRING:
> - string = qobject_to_qstring(lentry->value);
> - ret = bdrv_open(&s->bs[i], NULL, qstring_get_str(string),
> NULL,
> - flags, NULL, &local_err);
> - break;
> -
> - default:
> - error_setg(&local_err, "Specification of child block device
> %i "
> - "is invalid", i);
> - ret = -EINVAL;
> - }
> + for (i = 0; i < s->num_children; i++) {
> + char indexstr[32];
> + ret = snprintf(indexstr, 32, "children.%d", i);
> + assert(ret < 32);
>
> + ret = bdrv_open_image(&s->bs[i], NULL, options, indexstr, flags,
> + false, &local_err);
> if (ret < 0) {
> goto close_exit;
> }
> +
> opened[i] = true;
> }
>
> @@ -990,8 +963,6 @@ exit:
> if (local_err) {
> error_propagate(errp, local_err);
> }
> - QDECREF(list);
> - QDECREF(sub);
> return ret;
> }
>
> --
> 1.8.3.1
>
>
Reviewed-by: Jeff Cody <address@hidden>