From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 04/14] block/xen: Use blk_new_open() in blk_connect()
Date: Mon, 02 Feb 2015 14:41:10 -0500 [thread overview]
Message-ID: <54CFD2D6.1000101@redhat.com> (raw)
In-Reply-To: <20150202182751.GB19586@noname.redhat.com>
On 2015-02-02 at 13:27, Kevin Wolf wrote:
> Am 26.01.2015 um 16:00 hat Max Reitz geschrieben:
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>> hw/block/xen_disk.c | 28 ++++++++++++----------------
>> 1 file changed, 12 insertions(+), 16 deletions(-)
>>
>> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
>> index 21842a0..1b0257c 100644
>> --- a/hw/block/xen_disk.c
>> +++ b/hw/block/xen_disk.c
>> @@ -40,6 +40,8 @@
>> #include "xen_blkif.h"
>> #include "sysemu/blockdev.h"
>> #include "sysemu/block-backend.h"
>> +#include "qapi/qmp/qdict.h"
>> +#include "qapi/qmp/qstring.h"
>>
>> /* ------------------------------------------------------------- */
>>
>> @@ -897,30 +899,24 @@ static int blk_connect(struct XenDevice *xendev)
>> blkdev->dinfo = drive_get(IF_XEN, 0, index);
>> if (!blkdev->dinfo) {
>> Error *local_err = NULL;
>> - BlockBackend *blk;
>> - BlockDriver *drv;
>> - BlockDriverState *bs;
>> + QDict *options = NULL;
>>
>> - /* setup via xenbus -> create new block driver instance */
>> - xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n");
>> - blk = blk_new_with_bs(blkdev->dev, NULL);
>> - if (!blk) {
>> - return -1;
>> + if (strcmp(blkdev->fileproto, "<unset>")) {
> xen_disk's usage of the string "<unset>" to mark configurations where no
> driver is specific is quite ugly. I think it's possible for users to
> pass this string as the driver name, and we would end up probing the
> driver instead of returning an error.
>
> Which was actually how any invalid driver name was handled before this
> patch: bdrv_find_whitelisted_format() would return NULL, and instead of
> erroring out, NULL would be passed to bdrv_open(), which probed the
> driver then.
>
> This patch improves the situation: Now any value that is not "<unset>"
> is passed as the "driver" option, so invalid drivers will produce an
> error now. Should be mentioned in the commit message.
>
> However, if the user passes "<unset>", that still means probing. Ugly.
> Not sure why blkdev->fileproto == NULL wasn't used to specify that no
> driver was given. We could change that in a patch before this one if we
> wanted to clean it up. Or we could just feel reassured that xen_disk is
> horrible code, that this patch already fixes most of it and leave it
> alone.
I was glad enough that I made it out alive after digging just a bit into
the code. I'm fully in favor of leaving this as-is and adding a note to
the commit message.
Thank you for reviewing!
Max
>> + options = qdict_new();
>> + qdict_put_obj(options, "driver",
>> + QOBJECT(qstring_from_str(blkdev->fileproto)));
>> }
>> - blkdev->blk = blk;
>>
>> - bs = blk_bs(blk);
>> - drv = bdrv_find_whitelisted_format(blkdev->fileproto, readonly);
>> - if (bdrv_open(&bs, blkdev->filename, NULL, NULL, qflags,
>> - drv, &local_err) != 0) {
>> + /* setup via xenbus -> create new block driver instance */
>> + xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n");
>> + blkdev->blk = blk_new_open(blkdev->dev, blkdev->filename, NULL, options,
>> + qflags, &local_err);
>> + if (!blkdev->blk) {
>> xen_be_printf(&blkdev->xendev, 0, "error: %s\n",
>> error_get_pretty(local_err));
>> error_free(local_err);
>> - blk_unref(blk);
>> - blkdev->blk = NULL;
>> return -1;
>> }
>> - assert(bs == blk_bs(blk));
>> } else {
>> /* setup via qemu cmdline -> already setup for us */
>> xen_be_printf(&blkdev->xendev, 2, "get configured bdrv (cmdline setup)\n");
> Kevin
next prev parent reply other threads:[~2015-02-02 19:41 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-26 15:00 [Qemu-devel] [PATCH v3 00/14] block: Remove "growable", add blk_new_open() Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 01/14] block: Lift some BDS functions to the BlockBackend Max Reitz
2015-01-26 21:48 ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 02/14] block: Add blk_new_open() Max Reitz
2015-01-26 21:56 ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 03/14] blockdev: Use blk_new_open() in blockdev_init() Max Reitz
2015-01-26 22:37 ` Eric Blake
2015-01-27 2:08 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 04/14] block/xen: Use blk_new_open() in blk_connect() Max Reitz
2015-01-26 22:46 ` Eric Blake
2015-02-02 18:27 ` Kevin Wolf
2015-02-02 19:41 ` Max Reitz [this message]
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 05/14] qemu-img: Use blk_new_open() in img_open() Max Reitz
2015-01-26 22:47 ` Eric Blake
2015-02-02 18:35 ` Kevin Wolf
2015-02-02 19:42 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 06/14] qemu-img: Use blk_new_open() in img_rebase() Max Reitz
2015-01-27 3:05 ` Eric Blake
2015-01-27 15:01 ` Max Reitz
2015-02-02 19:00 ` Kevin Wolf
2015-02-02 19:47 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 07/14] qemu-img: Use BlockBackend as far as possible Max Reitz
2015-01-27 3:38 ` Eric Blake
2015-01-27 15:07 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 08/14] qemu-nbd: Use blk_new_open() in main() Max Reitz
2015-01-27 4:59 ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 09/14] qemu-io: Use blk_new_open() in openfile() Max Reitz
2015-01-27 16:23 ` Eric Blake
2015-02-02 19:34 ` Kevin Wolf
2015-02-02 19:51 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 10/14] qemu-io: Remove "growable" option Max Reitz
2015-01-27 16:59 ` Eric Blake
2015-01-27 17:04 ` Max Reitz
2015-01-27 17:10 ` Eric Blake
2015-01-27 17:11 ` Max Reitz
2015-02-02 19:36 ` Kevin Wolf
2015-02-02 19:52 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 11/14] qemu-io: Use BlockBackend Max Reitz
2015-01-27 17:08 ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 12/14] block: Clamp BlockBackend requests Max Reitz
2015-01-27 17:15 ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 13/14] block: Remove "growable" from BDS Max Reitz
2015-01-27 17:29 ` Eric Blake
2015-02-02 19:46 ` Kevin Wolf
2015-02-02 19:54 ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 14/14] block: Keep bdrv_check*_request()'s return value Max Reitz
2015-01-27 17:36 ` Eric Blake
2015-01-26 15:49 ` [Qemu-devel] [PATCH v3 00/14] block: Remove "growable", add blk_new_open() Stefano Stabellini
2015-02-02 19:50 ` 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=54CFD2D6.1000101@redhat.com \
--to=mreitz@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=stefano.stabellini@eu.citrix.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.