aboutsummaryrefslogtreecommitdiff
path: root/blockdev.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2014-04-17 13:16:01 +0200
committerKevin Wolf <kwolf@redhat.com>2014-04-22 12:00:20 +0200
commit98522f63f40adaebc412481e1d2e9170160d4539 (patch)
tree025ec57320b8fbec0eab0078506e41154833c111 /blockdev.c
parent5ff679b47d151c4f73be297f96606eaefb6cc4c4 (diff)
block: Add errp to bdrv_new()
This patch adds an errp parameter to bdrv_new() and updates all its callers. The next patches will make use of this in order to check for duplicate IDs. Most of the callers know that their ID is fine, so they can simply assert that there is no error. Behaviour doesn't change with this patch yet as bdrv_new() doesn't actually assign errors to errp. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'blockdev.c')
-rw-r--r--blockdev.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/blockdev.c b/blockdev.c
index 5dd01ea147..3a11a62019 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -461,7 +461,11 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
/* init */
dinfo = g_malloc0(sizeof(*dinfo));
dinfo->id = g_strdup(qemu_opts_id(opts));
- dinfo->bdrv = bdrv_new(dinfo->id);
+ dinfo->bdrv = bdrv_new(dinfo->id, &error);
+ if (error) {
+ error_propagate(errp, error);
+ goto bdrv_new_err;
+ }
dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0;
dinfo->bdrv->read_only = ro;
dinfo->refcount = 1;
@@ -523,8 +527,9 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
err:
bdrv_unref(dinfo->bdrv);
- g_free(dinfo->id);
QTAILQ_REMOVE(&drives, dinfo, next);
+bdrv_new_err:
+ g_free(dinfo->id);
g_free(dinfo);
early_err:
QDECREF(bs_opts);