[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 02/21] iotests/qcow2.py: Split feature fields into bits
From: |
Maxim Levitsky |
Subject: |
Re: [PATCH v2 02/21] iotests/qcow2.py: Split feature fields into bits |
Date: |
Wed, 06 Nov 2019 17:37:32 +0200 |
On Tue, 2019-10-15 at 16:27 +0200, Max Reitz wrote:
> Print the feature fields as a set of bits so that filtering is easier.
>
> Signed-off-by: Max Reitz <address@hidden>
> ---
> tests/qemu-iotests/031.out | 36 +++++++++----------
> tests/qemu-iotests/036.out | 18 +++++-----
> tests/qemu-iotests/039.out | 22 ++++++------
> tests/qemu-iotests/060.out | 20 +++++------
> tests/qemu-iotests/061.out | 72 ++++++++++++++++++-------------------
> tests/qemu-iotests/137.out | 2 +-
> tests/qemu-iotests/qcow2.py | 18 +++++++---
> 7 files changed, 99 insertions(+), 89 deletions(-)
>
> diff --git a/tests/qemu-iotests/031.out b/tests/qemu-iotests/031.out
> index 68a74d03b9..d535e407bc 100644
> --- a/tests/qemu-iotests/031.out
> +++ b/tests/qemu-iotests/031.out
> @@ -18,9 +18,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -46,9 +46,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -74,9 +74,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -109,9 +109,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -142,9 +142,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -175,9 +175,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> diff --git a/tests/qemu-iotests/036.out b/tests/qemu-iotests/036.out
> index e489b44386..15229a9604 100644
> --- a/tests/qemu-iotests/036.out
> +++ b/tests/qemu-iotests/036.out
> @@ -16,9 +16,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x8000000000000000
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features [63]
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -50,9 +50,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x8000000000000000
> +incompatible_features []
> +compatible_features []
> +autoclear_features [63]
> refcount_order 4
> header_length 104
>
> @@ -78,9 +78,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out
> index 2e356d51b6..bdafa3ace3 100644
> --- a/tests/qemu-iotests/039.out
> +++ b/tests/qemu-iotests/039.out
> @@ -4,7 +4,7 @@ QA output created by 039
> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -incompatible_features 0x0
> +incompatible_features []
> No errors were found on the image.
>
> == Creating a dirty image file ==
> @@ -12,7 +12,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x1
> +incompatible_features [0]
> ERROR cluster 5 refcount=0 reference=1
> ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0
>
> @@ -22,7 +22,7 @@ Data may be corrupted, or further writes to the image may
> corrupt it.
> == Read-only access must still work ==
> read 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -incompatible_features 0x1
> +incompatible_features [0]
>
> == Repairing the image file must succeed ==
> ERROR cluster 5 refcount=0 reference=1
> @@ -36,7 +36,7 @@ The following inconsistencies were found and repaired:
>
> Double checking the fixed image now...
> No errors were found on the image.
> -incompatible_features 0x0
> +incompatible_features []
>
> == Data should still be accessible after repair ==
> read 512/512 bytes at offset 0
> @@ -47,21 +47,21 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x1
> +incompatible_features [0]
> ERROR cluster 5 refcount=0 reference=1
> Rebuilding refcount structure
> Repairing cluster 1 refcount=1 reference=0
> Repairing cluster 2 refcount=1 reference=0
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -incompatible_features 0x0
> +incompatible_features []
>
> == Creating an image file with lazy_refcounts=off ==
> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x0
> +incompatible_features []
> No errors were found on the image.
>
> == Committing to a backing file with lazy_refcounts=on ==
> @@ -70,8 +70,8 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> backing_file=TEST_DIR/
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Image committed.
> -incompatible_features 0x0
> -incompatible_features 0x0
> +incompatible_features []
> +incompatible_features []
> No errors were found on the image.
> No errors were found on the image.
>
> @@ -80,7 +80,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x1
> +incompatible_features [0]
> ERROR cluster 5 refcount=0 reference=1
> ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0
>
> @@ -90,6 +90,6 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x0
> +incompatible_features []
> No errors were found on the image.
> *** done
> diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out
> index 0f6b0658a1..d27692a33c 100644
> --- a/tests/qemu-iotests/060.out
> +++ b/tests/qemu-iotests/060.out
> @@ -7,10 +7,10 @@ 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
> +incompatible_features []
> 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
> +incompatible_features [1]
> image: TEST_DIR/t.IMGFMT
> file format: IMGFMT
> virtual size: 64 MiB (67108864 bytes)
> @@ -33,10 +33,10 @@ 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
> +incompatible_features []
> 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
> +incompatible_features [1]
> ERROR refcount block 0 refcount=2
> ERROR cluster 2 refcount=1 reference=2
> Rebuilding refcount structure
> @@ -49,10 +49,10 @@ The following inconsistencies were found and repaired:
>
> Double checking the fixed image now...
> No errors were found on the image.
> -incompatible_features 0x0
> +incompatible_features []
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -incompatible_features 0x0
> +incompatible_features []
>
> === Testing cluster data reference into inactive L2 table ===
>
> @@ -69,10 +69,10 @@ 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
> +incompatible_features []
> 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
> +incompatible_features [1]
> ERROR cluster 4 refcount=1 reference=2
> Leaked cluster 9 refcount=1 reference=0
> Repairing cluster 4 refcount=1 reference=2
> @@ -85,10 +85,10 @@ The following inconsistencies were found and repaired:
>
> Double checking the fixed image now...
> No errors were found on the image.
> -incompatible_features 0x0
> +incompatible_features []
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -incompatible_features 0x0
> +incompatible_features []
> read 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> No errors were found on the image.
> diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out
> index d6a7c2af95..8b3091a412 100644
> --- a/tests/qemu-iotests/061.out
> +++ b/tests/qemu-iotests/061.out
> @@ -18,9 +18,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x1
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features [0]
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -42,9 +42,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -76,9 +76,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x1
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features [0]
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -100,9 +100,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -132,9 +132,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x1
> -compatible_features 0x1
> -autoclear_features 0x0
> +incompatible_features [0]
> +compatible_features [0]
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -161,9 +161,9 @@ refcount_table_offset 0x80000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -187,9 +187,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x40000000000
> -autoclear_features 0x40000000000
> +incompatible_features []
> +compatible_features [42]
> +autoclear_features [42]
> refcount_order 4
> header_length 104
>
> @@ -211,9 +211,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -237,9 +237,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 72
>
> @@ -256,9 +256,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x1
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features [0]
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -290,9 +290,9 @@ refcount_table_offset 0x10000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x1
> -compatible_features 0x1
> -autoclear_features 0x0
> +incompatible_features [0]
> +compatible_features [0]
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> @@ -319,9 +319,9 @@ refcount_table_offset 0x80000
> refcount_table_clusters 1
> nb_snapshots 0
> snapshot_offset 0x0
> -incompatible_features 0x0
> -compatible_features 0x0
> -autoclear_features 0x0
> +incompatible_features []
> +compatible_features []
> +autoclear_features []
> refcount_order 4
> header_length 104
>
> diff --git a/tests/qemu-iotests/137.out b/tests/qemu-iotests/137.out
> index 1c6569eb2c..bd4523a853 100644
> --- a/tests/qemu-iotests/137.out
> +++ b/tests/qemu-iotests/137.out
> @@ -36,7 +36,7 @@ qemu-io: Unsupported value 'blubb' for qcow2 option
> 'overlap-check'. Allowed are
> wrote 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> ./common.rc: Killed ( VALGRIND_QEMU="${VALGRIND_QEMU_IO}"
> _qemu_proc_exec "${VALGRIND_LOGFILE}" "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" )
> -incompatible_features 0x0
> +incompatible_features []
> 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)
> diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py
> index d813b4fc81..91e4420b9f 100755
> --- a/tests/qemu-iotests/qcow2.py
> +++ b/tests/qemu-iotests/qcow2.py
> @@ -42,9 +42,9 @@ class QcowHeader:
> [ uint64_t, '%#x', 'snapshot_offset' ],
>
> # Version 3 header fields
> - [ uint64_t, '%#x', 'incompatible_features' ],
> - [ uint64_t, '%#x', 'compatible_features' ],
> - [ uint64_t, '%#x', 'autoclear_features' ],
> + [ uint64_t, 'mask', 'incompatible_features' ],
> + [ uint64_t, 'mask', 'compatible_features' ],
> + [ uint64_t, 'mask', 'autoclear_features' ],
> [ uint32_t, '%d', 'refcount_order' ],
> [ uint32_t, '%d', 'header_length' ],
> ];
> @@ -130,7 +130,17 @@ class QcowHeader:
>
> def dump(self):
> for f in QcowHeader.fields:
> - print("%-25s" % f[2], f[1] % self.__dict__[f[2]])
> + value = self.__dict__[f[2]]
> + if f[1] == 'mask':
> + bits = []
> + for bit in range(64):
Very very minor nitpick, the type size (64 bit) is hardcoded here
but I think it is OK.
> + if value & (1 << bit):
> + bits.append(bit)
> + value_str = str(bits)
> + else:
> + value_str = f[1] % value
> +
> + print("%-25s" % f[2], value_str)
> print("")
>
> def dump_extensions(self):
This is very good idea and implementation.
Thanks!
Reviewed-by: Maxim Levitsky <address@hidden>
Best regards,
Maxim Levitsky
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v2 02/21] iotests/qcow2.py: Split feature fields into bits,
Maxim Levitsky <=