[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH for-2.7? v2 3/5] block/blkdebug: Store config filena
From: |
Max Reitz |
Subject: |
[Qemu-block] [PATCH for-2.7? v2 3/5] block/blkdebug: Store config filename |
Date: |
Mon, 15 Aug 2016 14:34:55 +0200 |
Store the configuration file's filename so it can later be used in
bdrv_refresh_filename() without having to directly access the options
QDict which may contain a value of a non-string type.
Signed-off-by: Max Reitz <address@hidden>
Reviewed-by: Kevin Wolf <address@hidden>
---
block/blkdebug.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/block/blkdebug.c b/block/blkdebug.c
index fb29283..d5db166 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -39,6 +39,9 @@ typedef struct BDRVBlkdebugState {
int new_state;
int align;
+ /* For blkdebug_refresh_filename() */
+ char *config_file;
+
QLIST_HEAD(, BlkdebugRule) rules[BLKDBG__MAX];
QSIMPLEQ_HEAD(, BlkdebugRule) active_rules;
QLIST_HEAD(, BlkdebugSuspendedReq) suspended_reqs;
@@ -351,7 +354,6 @@ static int blkdebug_open(BlockDriverState *bs, QDict
*options, int flags,
BDRVBlkdebugState *s = bs->opaque;
QemuOpts *opts;
Error *local_err = NULL;
- const char *config;
uint64_t align;
int ret;
@@ -364,8 +366,8 @@ static int blkdebug_open(BlockDriverState *bs, QDict
*options, int flags,
}
/* Read rules from config file or command line options */
- config = qemu_opt_get(opts, "config");
- ret = read_config(s, config, options, errp);
+ s->config_file = g_strdup(qemu_opt_get(opts, "config"));
+ ret = read_config(s, s->config_file, options, errp);
if (ret) {
goto out;
}
@@ -398,6 +400,9 @@ static int blkdebug_open(BlockDriverState *bs, QDict
*options, int flags,
fail_unref:
bdrv_unref_child(bs, bs->file);
out:
+ if (ret < 0) {
+ g_free(s->config_file);
+ }
qemu_opts_del(opts);
return ret;
}
@@ -515,6 +520,8 @@ static void blkdebug_close(BlockDriverState *bs)
remove_rule(rule);
}
}
+
+ g_free(s->config_file);
}
static void suspend_request(BlockDriverState *bs, BlkdebugRule *rule)
@@ -679,6 +686,7 @@ static int blkdebug_truncate(BlockDriverState *bs, int64_t
offset)
static void blkdebug_refresh_filename(BlockDriverState *bs, QDict *options)
{
+ BDRVBlkdebugState *s = bs->opaque;
QDict *opts;
const QDictEntry *e;
bool force_json = false;
@@ -700,8 +708,7 @@ static void blkdebug_refresh_filename(BlockDriverState *bs,
QDict *options)
if (!force_json && bs->file->bs->exact_filename[0]) {
snprintf(bs->exact_filename, sizeof(bs->exact_filename),
- "blkdebug:%s:%s",
- qdict_get_try_str(options, "config") ?: "",
+ "blkdebug:%s:%s", s->config_file ?: "",
bs->file->bs->exact_filename);
}
--
2.9.2
- [Qemu-block] [PATCH for-2.7? v2 0/5] block: Use QemuOpts for runtime options, Max Reitz, 2016/08/15
- [Qemu-block] [PATCH for-2.7? v2 3/5] block/blkdebug: Store config filename,
Max Reitz <=
- [Qemu-block] [PATCH for-2.7? v2 1/5] block/ssh: Use QemuOpts for runtime options, Max Reitz, 2016/08/15
- [Qemu-block] [PATCH for-2.7? v2 2/5] block/nbd: Use QemuOpts for runtime options, Max Reitz, 2016/08/15
- [Qemu-block] [PATCH for-2.7? v2 4/5] block/nbd: Store runtime option values, Max Reitz, 2016/08/15
- [Qemu-block] [PATCH for-2.7? v2 5/5] iotests: Test case for wrong runtime option types, Max Reitz, 2016/08/15
- Re: [Qemu-block] [PATCH for-2.7? v2 0/5] block: Use QemuOpts for runtime options, Jeff Cody, 2016/08/15