qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/4] qcow2: Add qcow2_signal_corruption()


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH 1/4] qcow2: Add qcow2_signal_corruption()
Date: Wed, 20 Aug 2014 12:10:19 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

Am 16.08.2014 um 23:16 hat Max Reitz geschrieben:
> Add a helper function for easily marking an image corrupt while
> outputting an informative message to stderr and via QAPI.
> 
> Signed-off-by: Max Reitz <address@hidden>
> ---
>  block/qcow2.c | 28 ++++++++++++++++++++++++++++
>  block/qcow2.h |  4 ++++
>  2 files changed, 32 insertions(+)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 435e0e1..ef2c931 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -30,6 +30,8 @@
>  #include "qemu/error-report.h"
>  #include "qapi/qmp/qerror.h"
>  #include "qapi/qmp/qbool.h"
> +#include "qapi/qmp/types.h"
> +#include "qapi-event.h"
>  #include "trace.h"
>  #include "qemu/option_int.h"
>  
> @@ -2378,6 +2380,32 @@ static int qcow2_amend_options(BlockDriverState *bs, 
> QemuOpts *opts)
>      return 0;
>  }
>  
> +void qcow2_signal_corruption(BlockDriverState *bs, int64_t offset, int64_t 
> size,
> +                             const char *message_format, ...)
> +{
> +    char *message;
> +    va_list ap;
> +
> +    va_start(ap, message_format);
> +    message = g_strdup_vprintf(message_format, ap);
> +    va_end(ap);
> +
> +    if (bs->read_only) {
> +        fprintf(stderr, "qcow2: Image is corrupt: %s\n", message);

The BDS isn't made unusable in read-only mode, so we can produce quite a
lot of these messages and fill up the log. Perhaps it would be better to
print the message only the first time (or the first n times) and then
tell the user that further errors won't be logged.

Also, including the block device or file name (or both) wouldn't hurt.

> +    } else {
> +        fprintf(stderr, "qcow2: Marking image as corrupt: %s\n", message);
> +        qapi_event_send_block_image_corrupted(bdrv_get_device_name(bs), 
> message,
> +                                              offset >= 0, offset,
> +                                              size >= 0, size, &error_abort);
> +    }
> +    g_free(message);
> +
> +    if (!bs->read_only) {
> +        qcow2_mark_corrupt(bs);
> +        bs->drv = NULL; /* make BDS unusable */
> +    }
> +}

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]