diff options
author | Kevin Wolf <kwolf@redhat.com> | 2014-02-03 14:49:42 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-02-09 09:12:38 +0100 |
commit | 765003db029ed4660a09807958276e251de84fac (patch) | |
tree | 2f4270288b6afdc804f0a6bc98783d29bbf2b795 /block.c | |
parent | 170632dbc9f75217861dd8bf2e6da3c269a1ba18 (diff) | |
download | qemu-765003db029ed4660a09807958276e251de84fac.zip qemu-765003db029ed4660a09807958276e251de84fac.tar.gz qemu-765003db029ed4660a09807958276e251de84fac.tar.bz2 |
block: Fail gracefully with missing filename
This fixes a regression introduced in commit 2a05cbe42 ('block: Allow
block devices without files'):
$ qemu-system-x86_64 -drive driver=file
qemu-system-x86_64: block.c:892: bdrv_open_common: Assertion
`!drv->bdrv_needs_filename || filename != ((void *)0)' failed.
Now the respective check must be performed not only in bdrv_file_open(),
but also in bdrv_open().
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -832,6 +832,12 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, filename = qdict_get_try_str(options, "filename"); } + if (drv->bdrv_needs_filename && !filename) { + error_setg(errp, "The '%s' block driver requires a file name", + drv->format_name); + return -EINVAL; + } + trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name); node_name = qdict_get_try_str(options, "node-name"); @@ -1031,11 +1037,6 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, goto fail; } qdict_del(options, "filename"); - } else if (drv->bdrv_needs_filename && !filename) { - error_setg(errp, "The '%s' block driver requires a file name", - drv->format_name); - ret = -EINVAL; - goto fail; } if (!drv->bdrv_file_open) { |