Commit c120f0fa authored by Wenchao Xia's avatar Wenchao Xia Committed by Luiz Capitulino
Browse files

qapi event: convert BLOCK_IMAGE_CORRUPTED

parent 5a2d2cbd
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include "block/qcow2.h"
#include "qemu/range.h"
#include "qapi/qmp/types.h"
#include "qapi-event.h"

static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size);
static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
@@ -1807,7 +1808,6 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset,
    } else if (ret > 0) {
        int metadata_ol_bitnr = ffs(ret) - 1;
        char *message;
        QObject *data;

        assert(metadata_ol_bitnr < QCOW2_OL_MAX_BITNR);

@@ -1816,12 +1816,14 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset,
                metadata_ol_names[metadata_ol_bitnr]);
        message = g_strdup_printf("Prevented %s overwrite",
                metadata_ol_names[metadata_ol_bitnr]);
        data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'offset': %"
                PRId64 ", 'size': %" PRId64 " }", bs->device_name, message,
                offset, size);
        monitor_protocol_event(QEVENT_BLOCK_IMAGE_CORRUPTED, data);
        qapi_event_send_block_image_corrupted(bdrv_get_device_name(bs),
                                              message,
                                              true,
                                              offset,
                                              true,
                                              size,
                                              &error_abort);
        g_free(message);
        qobject_decref(data);

        qcow2_mark_corrupt(bs);
        bs->drv = NULL; /* make BDS unusable */
+0 −22
Original line number Diff line number Diff line
@@ -28,28 +28,6 @@ Example:
    "data": { "actual": 944766976 },
    "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }

BLOCK_IMAGE_CORRUPTED
---------------------

Emitted when a disk image is being marked corrupt.

Data:

- "device": Device name (json-string)
- "msg":    Informative message (e.g., reason for the corruption) (json-string)
- "offset": If the corruption resulted from an image access, this is the access
            offset into the image (json-int)
- "size":   If the corruption resulted from an image access, this is the access
            size (json-int)

Example:

{ "event": "BLOCK_IMAGE_CORRUPTED",
    "data": { "device": "ide0-hd0",
        "msg": "Prevented active L1 table overwrite", "offset": 196608,
        "size": 65536 },
    "timestamp": { "seconds": 1378126126, "microseconds": 966463 } }

BLOCK_JOB_CANCELLED
-------------------

+24 −0
Original line number Diff line number Diff line
@@ -1428,6 +1428,30 @@
  'data': [ 'ignore', 'report', 'stop' ] }


##
# @BLOCK_IMAGE_CORRUPTED
#
# Emitted when a disk image is being marked corrupt
#
# @device: device name
#
# @msg: informative message for human consumption, such as the kind of
#       corruption being detected
#
# @offset: #optional, if the corruption resulted from an image access, this is
#          the access offset into the image
#
# @size: #optional, if the corruption resulted from an image access, this is
#        the access size
#
# Since: 1.7
##
{ 'event': 'BLOCK_IMAGE_CORRUPTED',
  'data': { 'device' : 'str',
            'msg'    : 'str',
            '*offset': 'int',
            '*size'  : 'int' } }

##
# @BLOCK_IO_ERROR
#