The Friday 05 Sep 2014 à 16:07:17 (+0200), Max Reitz wrote :
> Use the new function in case of a failed overlap check.
>
> This changes output in case of corruption, so adapt iotest 060's
> reference output accordingly.
>
> Signed-off-by: Max Reitz <mre...@redhat.com>
> ---
> block/qcow2-refcount.c | 24 +++---------------------
> tests/qemu-iotests/060.out | 10 +++++-----
> 2 files changed, 8 insertions(+), 26 deletions(-)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index 0bd75d2..b9d421e 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -26,8 +26,6 @@
> #include "block/block_int.h"
> #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,
> @@ -1838,27 +1836,11 @@ int qcow2_pre_write_overlap_check(BlockDriverState
> *bs, int ign, int64_t offset,
> return ret;
> } else if (ret > 0) {
> int metadata_ol_bitnr = ffs(ret) - 1;
> - char *message;
> -
> assert(metadata_ol_bitnr < QCOW2_OL_MAX_BITNR);
>
> - fprintf(stderr, "qcow2: Preventing invalid write on metadata
> (overlaps "
> - "with %s); image marked as corrupt.\n",
> - metadata_ol_names[metadata_ol_bitnr]);
> - message = g_strdup_printf("Prevented %s overwrite",
> - metadata_ol_names[metadata_ol_bitnr]);
> - qapi_event_send_block_image_corrupted(bdrv_get_device_name(bs),
> - message,
> - true,
> - offset,
> - true,
> - size,
> - true,
> - &error_abort);
> - g_free(message);
> -
> - qcow2_mark_corrupt(bs);
> - bs->drv = NULL; /* make BDS unusable */
> + qcow2_signal_corruption(bs, true, offset, size, "Preventing invalid "
> + "write on metadata (overlaps with %s)",
> + metadata_ol_names[metadata_ol_bitnr]);
> return -EIO;
> }
>
> diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out
> index c27c952..30806da 100644
> --- a/tests/qemu-iotests/060.out
> +++ b/tests/qemu-iotests/060.out
> @@ -8,7 +8,7 @@ ERROR cluster 3 refcount=1 reference=3
> 1 errors were found on the image.
> Data may be corrupted, or further writes to the image may corrupt it.
> incompatible_features 0x0
> -qcow2: Preventing invalid write on metadata (overlaps with active L1 table);
> image marked as corrupt.
> +qcow2: Marking image as corrupt: Preventing invalid write on metadata
> (overlaps with active L1 table); further corruption events will be suppressed
> write failed: Input/output error
> incompatible_features 0x2
> qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt;
> cannot be opened read/write
> @@ -24,7 +24,7 @@ ERROR cluster 2 refcount=1 reference=2
> 2 errors were found on the image.
> Data may be corrupted, or further writes to the image may corrupt it.
> incompatible_features 0x0
> -qcow2: Preventing invalid write on metadata (overlaps with refcount block);
> image marked as corrupt.
> +qcow2: Marking image as corrupt: Preventing invalid write on metadata
> (overlaps with refcount block); further corruption events will be suppressed
> write failed: Input/output error
> incompatible_features 0x2
> Repairing refcount block 0 refcount=2
> @@ -56,7 +56,7 @@ Data may be corrupted, or further writes to the image may
> corrupt it.
> 1 leaked clusters were found on the image.
> This means waste of disk space, but no harm to data.
> incompatible_features 0x0
> -qcow2: Preventing invalid write on metadata (overlaps with inactive L2
> table); image marked as corrupt.
> +qcow2: Marking image as corrupt: Preventing invalid write on metadata
> (overlaps with inactive L2 table); further corruption events will be
> suppressed
> write failed: Input/output error
> incompatible_features 0x2
> Repairing cluster 4 refcount=1 reference=2
> @@ -88,7 +88,7 @@ wrote 65536/65536 bytes at offset 536870912
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> discard 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -qcow2: Preventing invalid write on metadata (overlaps with active L2 table);
> image marked as corrupt.
> +qcow2: Marking image as corrupt: Preventing invalid write on metadata
> (overlaps with active L2 table); further corruption events will be suppressed
> blkdebug: Suspended request '0'
> write failed: Input/output error
> blkdebug: Resuming request '0'
> @@ -99,6 +99,6 @@ aio_write failed: No medium found
> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
> wrote 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -qcow2: Preventing invalid write on metadata (overlaps with qcow2_header);
> image marked as corrupt.
> +qcow2: Marking image as corrupt: Preventing invalid write on metadata
> (overlaps with qcow2_header); further corruption events will be suppressed
> write failed: Input/output error
> *** done
> --
> 2.1.0
>
>
Reviewed-by: Benoît Canet <benoit.ca...@nodalink.com>