Am 09.06.2010 21:28, schrieb Ryan Harper: > When configure qemu with --block-drv-whitelist we don't report when we are > blocked by the white list and the resulting error message is misleading: > > ./configure --target-list=x86_64-softmmu \ > --block-drv-whitelist=qcow2,raw,host_device,host_cdrom > > x86_64-softmmu/qemu-system-x86_64 -L pc-bios -m 512 -drive \ > file=fedora9_32_20G.qcow2,if=ide -monitor stdio > qemu: could not open disk image fedora9_32_20G.qcow2: Inappropriate ioctl for > device > > Which might lead one to look at the bdrv probe functions for floppy/cdrom > because we indeed will get an ioctl failure stored in errno and we report this > in vl.c when we get a non-zero return value from bdrv_open(). > > This patch adds an error report when we fail the whitelist and changes the > errno > value to ENOPROTOOPT which was the closest thing I could think of that matched > the actual error. > > Now we get the following output on whitelist failure: > > x86_64-softmmu/qemu-system-x86_64 -L pc-bios -m 512 -drive \ > file=fedora9_32_20G.qcow2,if=ide -monitor stdio > qemu-system-x86_64: -drive file=fedora9_32_20G.qcow2,if=ide: > block-drv-whitelist prevents using format 'file' > qemu: could not open disk image fedora9_32_20G.qcow2: Protocol not supported > > Signed-off-by: Ryan Harper <ry...@us.ibm.com> > --- > block.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/block.c b/block.c > index 39724c1..ffcf7f2 100644 > --- a/block.c > +++ b/block.c > @@ -403,6 +403,9 @@ static int bdrv_open_common(BlockDriverState *bs, const > char *filename, > pstrcpy(bs->filename, sizeof(bs->filename), filename); > > if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) { > + error_report("block-drv-whitelist prevents using format '%s'", > drv->format_name); > + /* reset errno since we're failing because of whitelist restrictions > */ > + errno = EPROTONOSUPPORT;
Any code that relies on this errno is broken. errno isn't part of the bdrv_open interface. In fact, last week I have sent a patch to fix the error message to use the return value instead, Anthony just needs to pull. The error_report may be a good idea, though. Kevin