Skip to contentSkip to conversation

Add an error_report when failing to open due to block-drv-whitelist

PATCH In review Ryan Harper 3 participants 4 messages Jun 9, 2010 – Jun 10, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add an error_report when failing to open due to block-drv-whitelist

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

---
 block.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
block.c +3 -0
index 39724c1..ffcf7f2 100644
@@ -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;
         return -ENOTSUP;
     }
 
Signature · 9 lines
1.6.3.3



-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
[email protected]
#1 lore raw
Quoted 18 lines · 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.

Quoted 7 lines

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

Do you really have to say raw and file in the whitelist? Is that what the source of the problem is?

Regards,

Anthony Liguori

Quoted 20 lines
---
  block.c |    3 +++
  1 files changed, 3 insertions(+), 0 deletions(-)
block.c +3 -0
index 39724c1..ffcf7f2 100644
@@ -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;
          return -ENOTSUP;
      }
 
#2 lore raw
Quoted 33 lines · Anthony Liguori
Quoted 22 lines · 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.

Quoted 9 lines

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

Quoted 2 lines

Do you really have to say raw and file in the whitelist? Is that what the source of the problem is?

I have to add 'file' to the whitelist string to get the above command line to work.

Quoted 28 lines

Regards,

Anthony Liguori

Quoted 23 lines
---
 block.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
block.c +2 -0
index 39724c1..ffcf7f2 100644
@@ -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;
         return -ENOTSUP;
     }
Signature · 4 lines
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
[email protected]
#3 lore raw
In reply to Ryan Harper

Am 09.06.2010 21:28, schrieb Ryan Harper:

Quoted 35 lines

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

---
 block.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
block.c +0 -0
index 39724c1..ffcf7f2 100644

block.c static int bdrv_open_common(BlockDriverState *bs, const char *filename, · line 408

Quoted 6 lines
block.c +3 -0
@@ -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