From: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
To: Kevin Wolf <kwolf@redhat.com>,
Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>,
qemu-block@nongnu.org, mreitz@redhat.com, qemu-devel@nongnu.org,
cornelia.huck@de.ibm.com, pasic@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH RFC 1/1] block: Handle NULL options correctly in raw_open
Date: Mon, 20 Mar 2017 09:39:37 +0800 [thread overview]
Message-ID: <20170320013937.GW6839@bjsdjshi@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170314032312.GF6756@bjsdjshi@linux.vnet.ibm.com>
* Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> [2017-03-14 11:23:12 +0800]:
> * Kevin Wolf <kwolf@redhat.com> [2017-03-13 11:15:22 +0100]:
>
> > Am 13.03.2017 um 04:31 hat Dong Jia Shi geschrieben:
> > > * Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> [2017-03-08 17:31:05 +0800]:
> > >
> > > > * Kevin Wolf <kwolf@redhat.com> [2017-03-08 10:13:46 +0100]:
> > > >
> > > > > Am 08.03.2017 um 03:15 hat Dong Jia Shi geschrieben:
> > > > > > A normal call for raw_open should always pass in a non-NULL @options,
> > > > > > but for some certain cases (e.g. trying to applying snapshot on a RBD
> > > > > > image), they call raw_open with a NULL @options right after the calling
> > > > > > for raw_close.
> > > > > >
> > > > > > Let's take the NULL @options as a sign of trying to do raw_open again,
> > > > > > and just simply return a success code.
> > > > > >
> > > > > > Signed-off-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
> > > > >
> > > > > I think we rather need to fix bdrv_snapshot_goto() so that it doesn't
> > > > > pass NULL, but the actual options that were given for the node (i.e.
> > > > > bs->options).
> > > > I've tried that before the current try. bs->options does not have the
> > > > "file" key-value pair, so that leads to a fail too. Should we put "file"
> > > > in to the options manually? I noticed that it was removed from
> > > > bs->options during the calling of bdrv_open_inherit.
> > > >
> > > Hi Kevin,
> > >
> > > After thinking for quite some time, I still don't think we need to fix
> > > the caller. The reason is that raw_close always does nothing, so no
> > > matter what the caller passing in, raw_open should do nothing but just
> > > return 0.
> >
> > raw is not the only format driver in qemu.
> >
> Hi Kevin,
>
> Before this I assumed that the long existing code in bdrv_snapshot_goto
> which passes in a NULL options to raw_open is on purpose, and that
> implies to me raw_open (and any other .bdrv_open callback) takes the
> responsibility to handle NULL options well. So at a first glance, I read
> your above comment as:
> "You should also fix .bdrv_open callback for every other formats to
> handle NULL options as well."
>
> But after staring it for a while, I read it from another point around:
> "You should fix the caller."
> If this is what you actually meant to tell, I have the following
> proposal then:
> diff --git a/block/snapshot.c b/block/snapshot.c
> index bf5c2ca..dfec139 100644
> --- a/block/snapshot.c
> +++ b/block/snapshot.c
> @@ -27,6 +27,7 @@
> #include "block/block_int.h"
> #include "qapi/error.h"
> #include "qapi/qmp/qerror.h"
> +#include "qapi/qmp/qstring.h"
>
> QemuOptsList internal_snapshot_opts = {
> .name = "snapshot",
> @@ -189,9 +190,14 @@ int bdrv_snapshot_goto(BlockDriverState *bs,
> }
>
> if (bs->file) {
> + QDict *options = qdict_clone_shallow(bs->options);
> + qdict_put(options, "file",
> + qstring_from_str(bdrv_get_node_name(bs->file->bs)));
> +
> drv->bdrv_close(bs);
> ret = bdrv_snapshot_goto(bs->file->bs, snapshot_id);
> - open_ret = drv->bdrv_open(bs, NULL, bs->open_flags, NULL);
> + open_ret = drv->bdrv_open(bs, options, bs->open_flags, NULL);
> + QDECREF(options);
> if (open_ret < 0) {
> bdrv_unref(bs->file->bs);
> bs->drv = NULL;
>
> I know I'm a little wordy, but that's because I want to make things
> clear. Anyway, I have to rely on your advice on this, since you are the
> expert.
>
Ping. :>
--
Dong Jia
prev parent reply other threads:[~2017-03-20 1:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-08 2:15 [Qemu-devel] [PATCH RFC 0/1] block: Handle NULL options correctly in raw_open Dong Jia Shi
2017-03-08 2:15 ` [Qemu-devel] [PATCH RFC 1/1] " Dong Jia Shi
2017-03-08 9:13 ` Kevin Wolf
2017-03-08 9:31 ` Dong Jia Shi
2017-03-13 3:31 ` Dong Jia Shi
2017-03-13 10:15 ` Kevin Wolf
2017-03-14 3:23 ` Dong Jia Shi
2017-03-20 1:39 ` Dong Jia Shi [this message]
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=20170320013937.GW6839@bjsdjshi@linux.vnet.ibm.com \
--to=bjsdjshi@linux.vnet.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pasic@linux.vnet.ibm.com \
--cc=qemu-block@nongnu.org \
--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 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.