Max Reitz <mre...@redhat.com> writes: > Currently, if bdrv_check() fails either by returning -errno or having > check_errors set, qemu-img check just exits with 1 after having told the > user that there were no errors on the image. This is bad. > > Instead of printing the check result if there were internal errors which > were so bad that bdrv_check() could not even complete with 0 as a return > value, qemu-img check should inform the user about the error. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > qemu-img.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/qemu-img.c b/qemu-img.c > index 09e7e72..731502c 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -687,16 +687,23 @@ static int img_check(int argc, char **argv) > check->corruptions_fixed = corruptions_fixed; > } > > - switch (output_format) { > - case OFORMAT_HUMAN: > - dump_human_image_check(check, quiet); > - break; > - case OFORMAT_JSON: > - dump_json_image_check(check, quiet); > - break; > + if (!ret) { > + switch (output_format) { > + case OFORMAT_HUMAN: > + dump_human_image_check(check, quiet); > + break; > + case OFORMAT_JSON: > + dump_json_image_check(check, quiet); > + break; > + } > } > > if (ret || check->check_errors) { > + if (ret) { > + error_report("Check failed: %s", strerror(-ret)); > + } else { > + error_report("Check failed"); > + } > ret = 1; > goto fail; > }
Non-zero ret can only come from bdrv_check() via collect_image_check(). bdrv_check() is specified to return zero or -errno. Okay. Aside: ret is used for error codes, 0/-1 and for the return value 0/1/2/3/63. Unclean, but not this patch's fault. Reviewed-by: Markus Armbruster <arm...@redhat.com>