From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, mreitz@redhat.com, pkrempa@redhat.com,
eblake@redhat.com, jcody@redhat.com, jdurgin@redhat.com,
mitake.hitoshi@lab.ntt.co.jp, namei.unix@gmail.com,
qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v3 20/36] rbd: Remove non-schema options from runtime_opts
Date: Fri, 23 Feb 2018 20:25:33 +0100 [thread overview]
Message-ID: <20180223192549.26666-21-kwolf@redhat.com> (raw)
In-Reply-To: <20180223192549.26666-1-kwolf@redhat.com>
Instead of the QemuOpts in qemu_rbd_connect(), we want to use QAPI
objects. As a preparation, fetch those options directly from the QDict
that .bdrv_open() supports in the rbd driver and that are not in the
schema.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
block/rbd.c | 55 ++++++++++++++++++++++++-------------------------------
1 file changed, 24 insertions(+), 31 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
index 4bbcce4eca..2e79c2d1fd 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -326,28 +326,6 @@ static QemuOptsList runtime_opts = {
/*
* server.* extracted manually, see qemu_rbd_mon_host()
*/
- {
- .name = "password-secret",
- .type = QEMU_OPT_STRING,
- .help = "ID of secret providing the password",
- },
-
- /*
- * Keys for qemu_rbd_parse_filename(), not in the QAPI schema
- */
- {
- /*
- * HACK: name starts with '=' so that qemu_opts_parse()
- * can't set it
- */
- .name = "=keyvalue-pairs",
- .type = QEMU_OPT_STRING,
- .help = "Legacy rados key/value option parameters",
- },
- {
- .name = "filename",
- .type = QEMU_OPT_STRING,
- },
{ /* end of list */ }
},
};
@@ -546,12 +524,13 @@ out:
static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
char **s_snap, char **s_image_name,
- QDict *options, bool cache, Error **errp)
+ QDict *options, bool cache,
+ const char *keypairs, const char *secretid,
+ Error **errp)
{
QemuOpts *opts;
char *mon_host = NULL;
- const char *pool, *snap, *conf, *user, *image_name, *keypairs;
- const char *secretid;
+ const char *pool, *snap, *conf, *user, *image_name;
Error *local_err = NULL;
int r;
@@ -570,14 +549,11 @@ static int qemu_rbd_connect(rados_t *cluster, rados_ioctx_t *io_ctx,
goto failed_opts;
}
- secretid = qemu_opt_get(opts, "password-secret");
-
pool = qemu_opt_get(opts, "pool");
conf = qemu_opt_get(opts, "conf");
snap = qemu_opt_get(opts, "snapshot");
user = qemu_opt_get(opts, "user");
image_name = qemu_opt_get(opts, "image");
- keypairs = qemu_opt_get(opts, "=keyvalue-pairs");
if (!pool || !image_name) {
error_setg(errp, "Parameters 'pool' and 'image' are required");
@@ -662,6 +638,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
BDRVRBDState *s = bs->opaque;
Error *local_err = NULL;
const char *filename;
+ char *keypairs, *secretid;
int r;
/* If we are given a filename, parse the filename, with precedence given to
@@ -672,16 +649,28 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
"This is an unsupported option, and may be deprecated "
"in the future");
qemu_rbd_parse_filename(filename, options, &local_err);
+ qdict_del(options, "filename");
if (local_err) {
error_propagate(errp, local_err);
return -EINVAL;
}
}
+ keypairs = g_strdup(qdict_get_try_str(options, "=keyvalue-pairs"));
+ if (keypairs) {
+ qdict_del(options, "=keyvalue-pairs");
+ }
+
+ secretid = g_strdup(qdict_get_try_str(options, "password-secret"));
+ if (secretid) {
+ qdict_del(options, "password-secret");
+ }
+
r = qemu_rbd_connect(&s->cluster, &s->io_ctx, &s->snap, &s->image_name,
- options, !(flags & BDRV_O_NOCACHE), errp);
+ options, !(flags & BDRV_O_NOCACHE), keypairs, secretid,
+ errp);
if (r < 0) {
- return r;
+ goto out;
}
/* rbd_open is always r/w */
@@ -708,13 +697,17 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
}
}
- return 0;
+ r = 0;
+ goto out;
failed_open:
rados_ioctx_destroy(s->io_ctx);
g_free(s->snap);
g_free(s->image_name);
rados_shutdown(s->cluster);
+out:
+ g_free(keypairs);
+ g_free(secretid);
return r;
}
--
2.13.6
next prev parent reply other threads:[~2018-02-23 19:26 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-23 19:25 [Qemu-devel] [PATCH v3 00/36] x-blockdev-create for protocols and qcow2 Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 01/36] block/qapi: Introduce BlockdevCreateOptions Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 02/36] block/qapi: Add qcow2 create options to schema Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 03/36] qcow2: Let qcow2_create() handle protocol layer Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 04/36] qcow2: Pass BlockdevCreateOptions to qcow2_create2() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 05/36] qcow2: Use BlockdevRef in qcow2_create2() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 06/36] qcow2: Use QCryptoBlockCreateOptions " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 07/36] qcow2: Handle full/falloc preallocation " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 08/36] util: Add qemu_opts_to_qdict_filtered() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 09/36] test-qemu-opts: Test qemu_opts_append() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 10/36] test-qemu-opts: Test qemu_opts_to_qdict_filtered() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 11/36] qdict: Introduce qdict_rename_keys() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 12/36] qcow2: Use visitor for options in qcow2_create() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 13/36] block: Make bdrv_is_whitelisted() public Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 14/36] block: x-blockdev-create QMP command Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 15/36] file-posix: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 16/36] file-win32: " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 17/36] gluster: " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 18/36] rbd: Fix use after free in qemu_rbd_set_keypairs() error path Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 19/36] rbd: Factor out qemu_rbd_connect() Kevin Wolf
2018-02-23 19:25 ` Kevin Wolf [this message]
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 21/36] rbd: Pass BlockdevOptionsRbd to qemu_rbd_connect() Kevin Wolf
2018-02-26 12:23 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 22/36] rbd: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 23/36] rbd: Assign s->snap/image_name in qemu_rbd_open() Kevin Wolf
2018-02-26 12:24 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 24/36] rbd: Use qemu_rbd_connect() in qemu_rbd_do_create() Kevin Wolf
2018-02-26 12:25 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 25/36] nfs: Use QAPI options in nfs_client_open() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 26/36] nfs: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 27/36] sheepdog: QAPIfy "redundancy" create option Kevin Wolf
2018-02-26 12:28 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 28/36] sheepdog: Support .bdrv_co_create Kevin Wolf
2018-02-26 12:30 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 29/36] ssh: Use QAPI BlockdevOptionsSsh object Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 30/36] ssh: QAPIfy host-key-check option Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 31/36] ssh: Pass BlockdevOptionsSsh to connect_to_ssh() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 32/36] ssh: Support .bdrv_co_create Kevin Wolf
2018-02-26 12:43 ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 33/36] file-posix: Fix no-op bdrv_truncate() with falloc preallocation Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 34/36] block: Fail bdrv_truncate() with negative size Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 35/36] qemu-iotests: Test qcow2 over file image creation with QMP Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 36/36] qemu-iotests: Test ssh image creation over QMP Kevin Wolf
2018-02-26 12:55 ` Max Reitz
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=20180223192549.26666-21-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=eblake@redhat.com \
--cc=jcody@redhat.com \
--cc=jdurgin@redhat.com \
--cc=mitake.hitoshi@lab.ntt.co.jp \
--cc=mreitz@redhat.com \
--cc=namei.unix@gmail.com \
--cc=pkrempa@redhat.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 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).