* [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states
@ 2010-06-30 15:48 Kevin Wolf
2010-06-30 15:48 ` [Qemu-devel] [PATCH 1/3] blkdebug: Fix set_state_opts definition Kevin Wolf
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Kevin Wolf @ 2010-06-30 15:48 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf
Turns out that using more than one state doesn't really work well. I'm trying
to reproduce a bug for which I need states, so now is the time to fix it.
Kevin Wolf (3):
blkdebug: Fix set_state_opts definition
blkdebug: Free QemuOpts after having read the config
blkdebug: Initialize state as 1
block/blkdebug.c | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread* [Qemu-devel] [PATCH 1/3] blkdebug: Fix set_state_opts definition 2010-06-30 15:48 [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Kevin Wolf @ 2010-06-30 15:48 ` Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config Kevin Wolf ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Kevin Wolf @ 2010-06-30 15:48 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf The list head was initialized to point to the wrong list, so all actions ended up being handled as inject-error even if they were set-state in fact. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block/blkdebug.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 98fed94..4ec8ca6 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -111,7 +111,7 @@ static QemuOptsList inject_error_opts = { static QemuOptsList set_state_opts = { .name = "set-state", - .head = QTAILQ_HEAD_INITIALIZER(inject_error_opts.head), + .head = QTAILQ_HEAD_INITIALIZER(set_state_opts.head), .desc = { { .name = "event", -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config 2010-06-30 15:48 [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 1/3] blkdebug: Fix set_state_opts definition Kevin Wolf @ 2010-06-30 15:48 ` Kevin Wolf 2010-07-01 6:47 ` Markus Armbruster 2010-06-30 15:48 ` [Qemu-devel] [PATCH 3/3] blkdebug: Initialize state as 1 Kevin Wolf 2010-07-01 6:50 ` [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Markus Armbruster 3 siblings, 1 reply; 7+ messages in thread From: Kevin Wolf @ 2010-06-30 15:48 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf Forgetting to free them means that the next instance inherits all rules and gets its own rules only additionally. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block/blkdebug.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 4ec8ca6..b084782 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -242,6 +242,11 @@ static int add_rule(QemuOpts *opts, void *opaque) return 0; } +static int free_opts(QemuOpts *opts, void *opaque) { + qemu_opts_del(opts); + return 0; +} + static int read_config(BDRVBlkdebugState *s, const char *filename) { FILE *f; @@ -267,6 +272,8 @@ static int read_config(BDRVBlkdebugState *s, const char *filename) ret = 0; fail: + qemu_opts_foreach(&inject_error_opts, free_opts, NULL, 0); + qemu_opts_foreach(&set_state_opts, free_opts, NULL, 0); fclose(f); return ret; } -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config 2010-06-30 15:48 ` [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config Kevin Wolf @ 2010-07-01 6:47 ` Markus Armbruster 2010-07-01 7:29 ` Kevin Wolf 0 siblings, 1 reply; 7+ messages in thread From: Markus Armbruster @ 2010-07-01 6:47 UTC (permalink / raw) To: Kevin Wolf; +Cc: qemu-devel Kevin Wolf <kwolf@redhat.com> writes: > Forgetting to free them means that the next instance inherits all rules and > gets its own rules only additionally. I also found a use for freeing a complete QemuOptsList, here's my solution. The code that needs it isn't ready, yet. If you'd like to use it, I can push it to my repo. diff --git a/qemu-option.c b/qemu-option.c index 7f70d0f..30327d4 100644 --- a/qemu-option.c +++ b/qemu-option.c @@ -719,6 +719,15 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exist return opts; } +void qemu_opts_reset(QemuOptsList *list) +{ + QemuOpts *opts, *next_opts; + + QTAILQ_FOREACH_SAFE(opts, &list->head, next, next_opts) { + qemu_opts_del(opts); + } +} + int qemu_opts_set(QemuOptsList *list, const char *id, const char *name, const char *value) { diff --git a/qemu-option.h b/qemu-option.h index 4823219..9e2406c 100644 --- a/qemu-option.h +++ b/qemu-option.h @@ -115,6 +115,7 @@ int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque, QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id); QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exists); +void qemu_opts_reset(QemuOptsList *list); int qemu_opts_set(QemuOptsList *list, const char *id, const char *name, const char *value); const char *qemu_opts_id(QemuOpts *opts); ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config 2010-07-01 6:47 ` Markus Armbruster @ 2010-07-01 7:29 ` Kevin Wolf 0 siblings, 0 replies; 7+ messages in thread From: Kevin Wolf @ 2010-07-01 7:29 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel Am 01.07.2010 08:47, schrieb Markus Armbruster: > Kevin Wolf <kwolf@redhat.com> writes: > >> Forgetting to free them means that the next instance inherits all rules and >> gets its own rules only additionally. > > I also found a use for freeing a complete QemuOptsList, here's my > solution. The code that needs it isn't ready, yet. If you'd like to > use it, I can push it to my repo. If you have a use for it, it's the better solution. I'll rebase on top of this as soon as you have sent it as a proper patch. Kevin ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 3/3] blkdebug: Initialize state as 1 2010-06-30 15:48 [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 1/3] blkdebug: Fix set_state_opts definition Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config Kevin Wolf @ 2010-06-30 15:48 ` Kevin Wolf 2010-07-01 6:50 ` [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Markus Armbruster 3 siblings, 0 replies; 7+ messages in thread From: Kevin Wolf @ 2010-06-30 15:48 UTC (permalink / raw) To: qemu-devel; +Cc: kwolf state = 0 in rules means that the rule is valid for any state. Therefore it's impossible to have a rule that works only in the initial state. This changes the initial state from 0 to 1 to make this possible. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block/blkdebug.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index b084782..99340db 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -306,6 +306,9 @@ static int blkdebug_open(BlockDriverState *bs, const char *filename, int flags) } filename = c + 1; + /* Set initial state */ + s->vars.state = 1; + /* Open the backing file */ ret = bdrv_file_open(&bs->file, filename, flags); if (ret < 0) { -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states 2010-06-30 15:48 [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Kevin Wolf ` (2 preceding siblings ...) 2010-06-30 15:48 ` [Qemu-devel] [PATCH 3/3] blkdebug: Initialize state as 1 Kevin Wolf @ 2010-07-01 6:50 ` Markus Armbruster 3 siblings, 0 replies; 7+ messages in thread From: Markus Armbruster @ 2010-07-01 6:50 UTC (permalink / raw) To: Kevin Wolf; +Cc: qemu-devel Kevin Wolf <kwolf@redhat.com> writes: > Turns out that using more than one state doesn't really work well. I'm trying > to reproduce a bug for which I need states, so now is the time to fix it. I'm not familiar with blkdebug, but these look like obvious bug fixes. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-07-01 7:29 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-06-30 15:48 [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 1/3] blkdebug: Fix set_state_opts definition Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 2/3] blkdebug: Free QemuOpts after having read the config Kevin Wolf 2010-07-01 6:47 ` Markus Armbruster 2010-07-01 7:29 ` Kevin Wolf 2010-06-30 15:48 ` [Qemu-devel] [PATCH 3/3] blkdebug: Initialize state as 1 Kevin Wolf 2010-07-01 6:50 ` [Qemu-devel] [PATCH 0/3] blkdebug: Fix config with multiple states Markus Armbruster
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.