Am 21.01.2013 12:03, schrieb Markus Armbruster:
Stefan Weil<s...@weilnetz.de>  writes:
Am 18.01.2013 09:53, schrieb Markus Armbruster:
Stefan Weil<s...@weilnetz.de>  writes:
This improves error reports for bochs, cow, qcow, qcow2, qed and vmdk
when a file with the wrong format is selected.

Signed-off-by: Stefan Weil<s...@weilnetz.de>
---
  block/bochs.c |    2 +-
  block/cow.c   |    2 +-
  block/qcow.c  |    2 +-
  block/qcow2.c |    2 +-
  block/qed.c   |    2 +-
  block/vmdk.c  |    4 ++--
  6 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/block/bochs.c b/block/bochs.c
index 1b1d9cd..3737583 100644
--- a/block/bochs.c
+++ b/block/bochs.c
@@ -126,7 +126,7 @@ static int bochs_open(BlockDriverState *bs, int flags)
          strcmp(bochs.subtype, GROWING_TYPE) ||
        ((le32_to_cpu(bochs.version) != HEADER_VERSION)&&
        (le32_to_cpu(bochs.version) != HEADER_V1))) {
-        goto fail;
+        return -EMEDIUMTYPE;
      }

      if (le32_to_cpu(bochs.version) == HEADER_V1) {
You make the function return either 0, -1 or -EMEDIUMTYPE.  Please make
it return either 0 or a negative errno code, like this (untested):

Hi Markus,

returning 0, -1 is like before, only returning -EMEDIUMTYPE is new.

You are right, a return value of -1 should be replaced by a negative
error value. I fixed this for block/vdi.c in a separate patch as
suggested by Kevin, see http://patchwork.ozlabs.org/patch/213375/.

The same kind of improvement should be done for other block
drivers which currently use -1, but that can be done after my
patch series was applied.

The primary purpose of my patch series was fixing open bugreports.
For vdi I did more because I feel responsible for that part of the
code.

I had a closer look at the various bdrv_open() methods, and how they're
used.  Turns out that we already assume they return 0/-errno, yet the
following methods return -1 on some or all errors:

     bochs_open
     cloop_open
     dmg_open
     parallels_open
     vdi_open
     vpc_open

They all need to be fixed.  I appreciate you fixing vdi_open().

However, you "improve" bochs_open() from completely and obviously broken
(return -1 on error always) to half-broken (return -1 on some errors,
and -errno on others).  I don't like that.

Fixing it up doesn't look hard to me (sketch appended).  Could you do
that for us?

If not, I'd prefer to leave bochs_open() completely and obviously
broken.

Kevin, Stefan, maybe you can take patches 1, 3, 4 and 5 from
this series, so I don't have to resend them.

I'll split patch 2 in order to realize Markus' suggestion.
Or you take it as it is, resulting in half-broken (instead of
full broken) xxx_open functions, and patches which fix the
remaining half can be applied on top.

Stefan




Reply via email to