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 <kw...@redhat.com> > --- > 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
signature.asc
Description: OpenPGP digital signature