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: Max Reitz
Subject: Re: [Qemu-devel] [PATCH 1/4] qcow2: Add qcow2_signal_corruption()
Date: Wed, 20 Aug 2014 21:17:09 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0

On 20.08.2014 12:10, Kevin Wolf wrote:
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.

I'll include both in v2.

Max

+    } 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]