[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/16] block: Add errp to bdrv_new()
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 10/16] block: Add errp to bdrv_new() |
Date: |
Wed, 23 Apr 2014 12:04:45 +0200 |
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 <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block.c | 6 +++---
block/iscsi.c | 2 +-
block/vvfat.c | 2 +-
blockdev.c | 9 +++++++--
hw/block/xen_disk.c | 7 +++++--
include/block/block.h | 2 +-
qemu-img.c | 6 +++---
qemu-io.c | 2 +-
qemu-nbd.c | 3 ++-
9 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/block.c b/block.c
index 0ff5764..f3b93c9 100644
--- a/block.c
+++ b/block.c
@@ -332,7 +332,7 @@ void bdrv_register(BlockDriver *bdrv)
}
/* create a new block device (by default it is empty) */
-BlockDriverState *bdrv_new(const char *device_name)
+BlockDriverState *bdrv_new(const char *device_name, Error **errp)
{
BlockDriverState *bs;
@@ -1220,7 +1220,7 @@ void bdrv_append_temp_snapshot(BlockDriverState *bs,
Error **errp)
qdict_put(snapshot_options, "file.filename",
qstring_from_str(tmp_filename));
- bs_snapshot = bdrv_new("");
+ bs_snapshot = bdrv_new("", &error_abort);
bs_snapshot->is_temporary = 1;
ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
@@ -1287,7 +1287,7 @@ int bdrv_open(BlockDriverState **pbs, const char
*filename,
if (*pbs) {
bs = *pbs;
} else {
- bs = bdrv_new("");
+ bs = bdrv_new("", &error_abort);
}
/* NULL means an empty set of options */
diff --git a/block/iscsi.c b/block/iscsi.c
index f425573..a636ea4 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1401,7 +1401,7 @@ static int iscsi_create(const char *filename,
QEMUOptionParameter *options,
IscsiLun *iscsilun = NULL;
QDict *bs_options;
- bs = bdrv_new("");
+ bs = bdrv_new("", &error_abort);
/* Read out options */
while (options && options->name) {
diff --git a/block/vvfat.c b/block/vvfat.c
index 1978c9e..c3af7ff 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -2947,7 +2947,7 @@ static int enable_write_target(BDRVVVFATState *s)
unlink(s->qcow_filename);
#endif
- s->bs->backing_hd = bdrv_new("");
+ s->bs->backing_hd = bdrv_new("", &error_abort);
s->bs->backing_hd->drv = &vvfat_write_target;
s->bs->backing_hd->opaque = g_malloc(sizeof(void*));
*(void**)s->bs->backing_hd->opaque = s;
diff --git a/blockdev.c b/blockdev.c
index 5dd01ea..3a11a62 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);
diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index bc061e6..a8fea72 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -817,11 +817,14 @@ static int blk_connect(struct XenDevice *xendev)
index = (blkdev->xendev.dev - 202 * 256) / 16;
blkdev->dinfo = drive_get(IF_XEN, 0, index);
if (!blkdev->dinfo) {
+ Error *local_err = NULL;
/* setup via xenbus -> create new block driver instance */
xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n");
- blkdev->bs = bdrv_new(blkdev->dev);
+ blkdev->bs = bdrv_new(blkdev->dev, &local_err);
+ if (local_err) {
+ blkdev->bs = NULL;
+ }
if (blkdev->bs) {
- Error *local_err = NULL;
BlockDriver *drv = bdrv_find_whitelisted_format(blkdev->fileproto,
readonly);
if (bdrv_open(&blkdev->bs, blkdev->filename, NULL, NULL, qflags,
diff --git a/include/block/block.h b/include/block/block.h
index 2b51eec..c12808a 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -180,7 +180,7 @@ int bdrv_create(BlockDriver *drv, const char* filename,
QEMUOptionParameter *options, Error **errp);
int bdrv_create_file(const char* filename, QEMUOptionParameter *options,
Error **errp);
-BlockDriverState *bdrv_new(const char *device_name);
+BlockDriverState *bdrv_new(const char *device_name, Error **errp);
void bdrv_make_anon(BlockDriverState *bs);
void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old);
void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top);
diff --git a/qemu-img.c b/qemu-img.c
index 8455994..3e8bd80 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -274,7 +274,7 @@ static BlockDriverState *bdrv_new_open(const char *filename,
Error *local_err = NULL;
int ret;
- bs = bdrv_new("image");
+ bs = bdrv_new("image", &error_abort);
if (fmt) {
drv = bdrv_find_format(fmt);
@@ -2344,7 +2344,7 @@ static int img_rebase(int argc, char **argv)
} else {
char backing_name[1024];
- bs_old_backing = bdrv_new("old_backing");
+ bs_old_backing = bdrv_new("old_backing", &error_abort);
bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
ret = bdrv_open(&bs_old_backing, backing_name, NULL, NULL,
BDRV_O_FLAGS,
old_backing_drv, &local_err);
@@ -2355,7 +2355,7 @@ static int img_rebase(int argc, char **argv)
goto out;
}
if (out_baseimg[0]) {
- bs_new_backing = bdrv_new("new_backing");
+ bs_new_backing = bdrv_new("new_backing", &error_abort);
ret = bdrv_open(&bs_new_backing, out_baseimg, NULL, NULL,
BDRV_O_FLAGS, new_backing_drv, &local_err);
if (ret) {
diff --git a/qemu-io.c b/qemu-io.c
index 5d7b53f..9fcd72b 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -67,7 +67,7 @@ static int openfile(char *name, int flags, int growable,
QDict *opts)
return 1;
}
} else {
- qemuio_bs = bdrv_new("hda");
+ qemuio_bs = bdrv_new("hda", &error_abort);
if (bdrv_open(&qemuio_bs, name, NULL, opts, flags, NULL, &local_err)
< 0)
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 899e67c..eed79fa 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -657,7 +657,8 @@ int main(int argc, char **argv)
drv = NULL;
}
- bs = bdrv_new("hda");
+ bs = bdrv_new("hda", &error_abort);
+
srcpath = argv[optind];
ret = bdrv_open(&bs, srcpath, NULL, NULL, flags, drv, &local_err);
if (ret < 0) {
--
1.8.3.1
- [Qemu-devel] [PULL 00/16] Block patches, Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 03/16] block: Catch integer overflow in bdrv_rw_co(), Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 04/16] block: Check bdrv_getlength() return value in bdrv_make_zero(), Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 05/16] vmdk: Fix %d and %lld to PRI* in format strings, Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 02/16] block: Limit size to INT_MAX in bdrv_check_byte_request(), Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 01/16] block: Fix nb_sectors check in bdrv_check_byte_request(), Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 07/16] curl: Replaced old error handling with error reporting API., Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 11/16] qemu-img: Avoid duplicate block device IDs, Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 13/16] qemu-iotests: Check common namespace for id and node-name, Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 10/16] block: Add errp to bdrv_new(),
Kevin Wolf <=
- [Qemu-devel] [PULL 12/16] block: Catch duplicate IDs in bdrv_new(), Kevin Wolf, 2014/04/23
- [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Kevin Wolf, 2014/04/23
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Jeff Cody, 2014/04/25
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Markus Armbruster, 2014/04/25
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Fam Zheng, 2014/04/27
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Mike Day, 2014/04/30
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Eric Blake, 2014/04/30
- Re: [Qemu-devel] [PULL 14/16] qemu-img: Improve error messages, Mike Day, 2014/04/30
[Qemu-devel] [PULL 09/16] convert fprintf() calls to error_setg() in block/qed.c:bdrv_qed_create(), Kevin Wolf, 2014/04/23
[Qemu-devel] [PULL 08/16] block: Remove -errno return value from bdrv_assign_node_name, Kevin Wolf, 2014/04/23