qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 01/15] block: Fail gracefully when using a forma


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 01/15] block: Fail gracefully when using a format driver on protocol level
Date: Fri, 12 Apr 2013 16:50:27 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130402 Thunderbird/17.0.5

On 04/12/2013 02:47 PM, Kevin Wolf wrote:
> Specifying the wrong driver could fail an assertion:
> 
> $ qemu-system-x86_64 -drive file.driver=qcow2,file=x
> qemu-system-x86_64: block.c:721: bdrv_open_common: Assertion `file !=
> ((void *)0)' failed.
> 
> Signed-off-by: Kevin Wolf <address@hidden>
> ---
>  block.c                    |  7 +++++++
>  tests/qemu-iotests/051     |  7 +++++++
>  tests/qemu-iotests/051.out | 10 ++++++++++
>  3 files changed, 24 insertions(+)
> 
> diff --git a/block.c b/block.c
> index 602d8a4..f23bdcc 100644
> --- a/block.c
> +++ b/block.c
> @@ -718,6 +718,13 @@ static int bdrv_open_common(BlockDriverState *bs, 
> BlockDriverState *file,
>          assert(drv->bdrv_parse_filename || filename != NULL);
>          ret = drv->bdrv_file_open(bs, filename, options, open_flags);
>      } else {
> +        if (file == NULL) {
> +            qerror_report(ERROR_CLASS_GENERIC_ERROR, "The '%s' block driver 
> is "
> +                          "not suitable for the bottom level",
> +                          drv->format_name);
> +            ret = -EINVAL;
> +            goto free_and_fail;
> +        }
>          assert(file != NULL);

Is it really necessary to leave the assert in place, now that you have a
check for NULL followed by unconditional goto?

Just reading that error message, I'm not quite sure what you meant by
"not suitable for the bottom level".  I guess the intent is that
file.driver specifies the protocol, and that both raw and qcow2 are
formats possible on the file protocol, rather than qcow2 being a file
protocol itself.

> +Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2
> +qemu: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: The 'qcow2' block 
> driver is not suitable for the bottom level
> +qemu: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: could not open disk 
> image TEST_DIR/t.qcow2: Invalid argument

Maybe a better error message would be this?

Attempt to use format driver 'qcow2' where a protocol driver was expected

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]