Message ID | 20170308021533.78292-2-bjsdjshi@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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). Kevin
* 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. > > Kevin >
diff --git a/block/raw-format.c b/block/raw-format.c index 86fbc65..ee05730 100644 --- a/block/raw-format.c +++ b/block/raw-format.c @@ -384,6 +384,14 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, BDRVRawState *s = bs->opaque; int ret; + /* + * Notice: + * NULL options is only sensible when applying a snapshot. + */ + if (!options) { + return 0; + } + bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file, false, errp); if (!bs->file) {
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> --- block/raw-format.c | 8 ++++++++ 1 file changed, 8 insertions(+)