X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=block%2Fblkdebug.c;h=a251802ad40c12e838147cc5762dd946ec95b77f;hb=9e07bdf816b186632cda9651ac29bba76d299c03;hp=8325f75f80dabc9f4a4871c535e702faa21a368e;hpb=b666d239509a0855740444c254a65cbf567bfb90;p=mirror_qemu.git diff --git a/block/blkdebug.c b/block/blkdebug.c index 8325f75f80..a251802ad4 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -26,8 +26,6 @@ #include "block_int.h" #include "module.h" -#include - typedef struct BlkdebugVars { int state; @@ -113,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", @@ -216,7 +214,7 @@ static int add_rule(QemuOpts *opts, void *opaque) } /* Set attributes common for all actions */ - rule = qemu_mallocz(sizeof(*rule)); + rule = g_malloc0(sizeof(*rule)); *rule = (struct BlkdebugRule) { .event = event, .action = d->action, @@ -269,6 +267,8 @@ static int read_config(BDRVBlkdebugState *s, const char *filename) ret = 0; fail: + qemu_opts_reset(&inject_error_opts); + qemu_opts_reset(&set_state_opts); fclose(f); return ret; } @@ -292,15 +292,18 @@ static int blkdebug_open(BlockDriverState *bs, const char *filename, int flags) return -EINVAL; } - config = strdup(filename); + config = g_strdup(filename); config[c - filename] = '\0'; ret = read_config(s, config); - free(config); + g_free(config); if (ret < 0) { return ret; } 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) { @@ -389,16 +392,11 @@ static void blkdebug_close(BlockDriverState *bs) for (i = 0; i < BLKDBG_EVENT_MAX; i++) { QLIST_FOREACH_SAFE(rule, &s->rules[i], next, next) { QLIST_REMOVE(rule, next); - qemu_free(rule); + g_free(rule); } } } -static void blkdebug_flush(BlockDriverState *bs) -{ - bdrv_flush(bs->file); -} - static BlockDriverAIOCB *blkdebug_aio_flush(BlockDriverState *bs, BlockDriverCompletionFunc *cb, void *opaque) { @@ -436,9 +434,7 @@ static void blkdebug_debug_event(BlockDriverState *bs, BlkDebugEvent event) struct BlkdebugRule *rule; BlkdebugVars old_vars = s->vars; - if (event < 0 || event >= BLKDBG_EVENT_MAX) { - return; - } + assert((int)event >= 0 && event < BLKDBG_EVENT_MAX); QLIST_FOREACH(rule, &s->rules[event], next) { process_rule(bs, rule, &old_vars); @@ -453,7 +449,6 @@ static BlockDriver bdrv_blkdebug = { .bdrv_file_open = blkdebug_open, .bdrv_close = blkdebug_close, - .bdrv_flush = blkdebug_flush, .bdrv_aio_readv = blkdebug_aio_readv, .bdrv_aio_writev = blkdebug_aio_writev,