[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 07/13] block: Use QemuOpts in bdrv_open_common()
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH v2 07/13] block: Use QemuOpts in bdrv_open_common() |
Date: |
Wed, 10 Jun 2015 15:47:01 +0200 |
Instead of manually parsing options and then deleting them from the
options QDict, just use QemuOpts like most other places that deal with
block device options.
More options will be added there and then QemuOpts is a lot more
managable than open-coding everything.
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 39 ++++++++++++++++++++++++++++++++++-----
1 file changed, 34 insertions(+), 5 deletions(-)
diff --git a/block.c b/block.c
index 2786e47..7b466cf 100644
--- a/block.c
+++ b/block.c
@@ -767,6 +767,19 @@ static void bdrv_assign_node_name(BlockDriverState *bs,
QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
}
+static QemuOptsList bdrv_runtime_opts = {
+ .name = "bdrv_common",
+ .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
+ .desc = {
+ {
+ .name = "node-name",
+ .type = QEMU_OPT_STRING,
+ .help = "Node name of the block device node",
+ },
+ { /* end of list */ }
+ },
+};
+
/*
* Common part for opening disk images and files
*
@@ -778,6 +791,7 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
int ret, open_flags;
const char *filename;
const char *node_name = NULL;
+ QemuOpts *opts;
Error *local_err = NULL;
assert(drv != NULL);
@@ -798,19 +812,28 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
- node_name = qdict_get_try_str(options, "node-name");
+ opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
+ qemu_opts_absorb_qdict(opts, options, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ ret = -EINVAL;
+ goto fail_opts;
+ }
+
+ node_name = qemu_opt_get(opts, "node-name");
bdrv_assign_node_name(bs, node_name, &local_err);
if (local_err) {
error_propagate(errp, local_err);
- return -EINVAL;
+ ret = -EINVAL;
+ goto fail_opts;
}
- qdict_del(options, "node-name");
/* bdrv_open() with directly using a protocol as drv. This layer is already
* opened, so assign it to bs (while file becomes a closed
BlockDriverState)
* and return immediately. */
if (file != NULL && drv->bdrv_file_open) {
bdrv_swap(file, bs);
+ qemu_opts_del(opts);
return 0;
}
@@ -827,7 +850,8 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
? "Driver '%s' can only be used for read-only devices"
: "Driver '%s' is not whitelisted",
drv->format_name);
- return -ENOTSUP;
+ ret = -ENOTSUP;
+ goto fail_opts;
}
assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
@@ -836,7 +860,8 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
bdrv_enable_copy_on_read(bs);
} else {
error_setg(errp, "Can't use copy-on-read on read-only device");
- return -EINVAL;
+ ret = -EINVAL;
+ goto fail_opts;
}
}
@@ -902,6 +927,8 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
assert(bdrv_opt_mem_align(bs) != 0);
assert(bdrv_min_mem_align(bs) != 0);
assert((bs->request_alignment != 0) || bs->sg);
+
+ qemu_opts_del(opts);
return 0;
free_and_fail:
@@ -909,6 +936,8 @@ free_and_fail:
g_free(bs->opaque);
bs->opaque = NULL;
bs->drv = NULL;
+fail_opts:
+ qemu_opts_del(opts);
return ret;
}
--
1.8.3.1
- [Qemu-devel] [PATCH v2 01/13] qdict: Add qdict_array_entries(), (continued)
- [Qemu-devel] [PATCH v2 01/13] qdict: Add qdict_array_entries(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 06/13] block: Use macro for cache option names, Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 03/13] check-qdict: Test cases for new functions, Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 02/13] qdict: Add qdict_{set, copy}_default(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 05/13] vmdk: Use bdrv_open_image(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 07/13] block: Use QemuOpts in bdrv_open_common(),
Kevin Wolf <=
- [Qemu-devel] [PATCH v2 04/13] quorum: Use bdrv_open_image(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 09/13] block: Drain requests before swapping nodes in bdrv_swap(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 10/13] queue.h: Add QLIST_FIX_HEAD_PTR(), Kevin Wolf, 2015/06/10
- [Qemu-devel] [PATCH v2 12/13] block: Add BlockDriverState.inherits_from, Kevin Wolf, 2015/06/10