From: Kevin Wolf <kwolf@redhat.com>
To: "Benoît Canet" <benoit@irqsave.net>
Cc: famz@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org,
armbru@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH V4 2/7] block: Allow the user to define "node-name" option.
Date: Mon, 9 Dec 2013 17:15:26 +0100 [thread overview]
Message-ID: <20131209161526.GI3549@dhcp-200-207.str.redhat.com> (raw)
In-Reply-To: <1386263703-19292-3-git-send-email-benoit@irqsave.net>
Am 05.12.2013 um 18:14 hat Benoît Canet geschrieben:
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
> block.c | 44 +++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 39 insertions(+), 5 deletions(-)
>
> diff --git a/block.c b/block.c
> index 4f6b36a..61f5ba0 100644
> --- a/block.c
> +++ b/block.c
> @@ -873,6 +873,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename,
> const char *drvname;
> bool allow_protocol_prefix = false;
> Error *local_err = NULL;
> + const char *node_name = NULL;
> int ret;
>
> /* NULL means an empty set of options */
> @@ -880,7 +881,15 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename,
> options = qdict_new();
> }
>
> - bs = bdrv_new("", "");
> + node_name = qdict_get_try_str(options, "node-name");
> + if (node_name && bdrv_find_node(node_name)) {
> + error_setg(errp, "Duplicate node name");
> + QDECREF(options);
> + return -EINVAL;
> + }
> + bs = bdrv_new("", node_name ? node_name : "");
> + qdict_del(options, "node-name");
> +
> bs->options = options;
> options = qdict_clone_shallow(options);
>
> @@ -980,6 +989,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
> int back_flags, ret;
> BlockDriver *back_drv = NULL;
> Error *local_err = NULL;
> + const char *node_name = NULL;
>
> if (bs->backing_hd != NULL) {
> QDECREF(options);
> @@ -1002,7 +1012,14 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
> sizeof(backing_filename));
> }
>
> - bs->backing_hd = bdrv_new("", "");
> + node_name = qdict_get_try_str(options, "node-name");
> + if (node_name && bdrv_find_node(node_name)) {
> + error_setg(errp, "Duplicate node name");
> + QDECREF(options);
> + return -EINVAL;
> + }
> + bs->backing_hd = bdrv_new("", node_name ? node_name : "");
> + qdict_del(options, "node-name");
>
> if (bs->backing_format[0] != '\0') {
> back_drv = bdrv_find_format(bs->backing_format);
> @@ -1046,6 +1063,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
> BlockDriverState *file = NULL;
> QDict *file_options = NULL;
> const char *drvname;
> + const char *node_name = NULL;
> Error *local_err = NULL;
>
> /* NULL means an empty set of options */
> @@ -1053,6 +1071,22 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
> options = qdict_new();
> }
>
> + node_name = qdict_get_try_str(options, "node-name");
> + if (node_name && bdrv_find_node(node_name)) {
> + error_setg(errp, "Duplicate node name");
> + QDECREF(options);
> + return -EINVAL;
> + }
> +
> + if (node_name) {
> + pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
> + if (node_name[0] != '\0') {
> + QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
> + }
> + }
> +
> + qdict_del(options, "node-name");
We duplicate some code all over the place. In general you seem to be
trying to let the caller of bdrv_new() already figure out what the node
name is by parsing the options QDict; here however, you do it after
bdrv_new().
Can't we consolidate this and only ever set the node name in
bdrv_open_common(), so that the option is parsed only once, there is
only once place adding BDSes to the list, and there is only one place
checking for duplicates?
Kevin
next prev parent reply other threads:[~2013-12-09 16:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-05 17:14 [Qemu-devel] [PATCH V4 0/7] Giving names to BlockDriverState graph nodes Benoît Canet
2013-12-05 17:14 ` [Qemu-devel] [PATCH V4 1/7] block: Add bs->node_name to hold the name of a bs node of the bs graph Benoît Canet
2013-12-09 16:04 ` Kevin Wolf
2013-12-09 16:11 ` Kevin Wolf
2013-12-05 17:14 ` [Qemu-devel] [PATCH V4 2/7] block: Allow the user to define "node-name" option Benoît Canet
2013-12-06 15:35 ` Eric Blake
2013-12-09 16:15 ` Kevin Wolf [this message]
2013-12-11 14:42 ` Benoît Canet
2013-12-05 17:14 ` [Qemu-devel] [PATCH V4 3/7] qmp: Add a command to list the named BlockDriverState nodes Benoît Canet
2013-12-06 15:59 ` Eric Blake
2013-12-09 15:46 ` Benoît Canet
2013-12-10 15:22 ` Eric Blake
2013-12-05 17:15 ` [Qemu-devel] [PATCH V4 4/7] qmp: Allow to change password on names block driver states Benoît Canet
2013-12-06 14:27 ` Luiz Capitulino
2013-12-06 15:24 ` Eric Blake
2013-12-06 16:52 ` Luiz Capitulino
2013-12-09 13:35 ` Benoît Canet
2013-12-09 16:23 ` Kevin Wolf
2013-12-09 16:41 ` Luiz Capitulino
2013-12-09 16:48 ` Benoît Canet
2013-12-09 17:03 ` Luiz Capitulino
2013-12-09 17:16 ` Benoît Canet
2013-12-10 9:57 ` Kevin Wolf
2013-12-10 14:06 ` Luiz Capitulino
2013-12-10 14:25 ` Kevin Wolf
2013-12-10 15:16 ` Luiz Capitulino
2013-12-10 15:54 ` Kevin Wolf
2013-12-10 16:15 ` Eric Blake
2013-12-11 3:52 ` Fam Zheng
2013-12-11 13:20 ` Luiz Capitulino
2013-12-05 17:15 ` [Qemu-devel] [PATCH V4 5/7] qmp: Allow block_resize to manipulate bs graph nodes Benoît Canet
2013-12-09 16:24 ` Kevin Wolf
2013-12-09 16:41 ` Benoît Canet
2013-12-10 9:59 ` Kevin Wolf
2013-12-05 17:15 ` [Qemu-devel] [PATCH V4 6/7] block: Create authorizations mechanism for external snapshots Benoît Canet
2013-12-05 17:15 ` [Qemu-devel] [PATCH V4 7/7] qmp: Allow to take external snapshots on bs graphs node Benoît Canet
2013-12-09 15:32 ` [Qemu-devel] [PATCH V4 0/7] Giving names to BlockDriverState graph nodes Kevin Wolf
2013-12-09 15:52 ` Benoît Canet
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=20131209161526.GI3549@dhcp-200-207.str.redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=benoit@irqsave.net \
--cc=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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 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).