[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 03/14] qcow2: introduce icount field for snapshots
From: |
Alex Bennée |
Subject: |
Re: [PATCH v6 03/14] qcow2: introduce icount field for snapshots |
Date: |
Thu, 01 Oct 2020 13:53:39 +0100 |
User-agent: |
mu4e 1.5.5; emacs 28.0.50 |
Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru> writes:
> From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
>
> This patch introduces the icount field for saving within the snapshot.
> It is required for navigation between the snapshots in record/replay mode.
>
> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
> Acked-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/qcow2-snapshot.c | 7 +++++++
> block/qcow2.h | 3 +++
> docs/interop/qcow2.txt | 5 +++++
> 3 files changed, 15 insertions(+)
>
> diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
> index 9b68690f56..d68b25e0c5 100644
> --- a/block/qcow2-snapshot.c
> +++ b/block/qcow2-snapshot.c
> @@ -164,6 +164,12 @@ static int qcow2_do_read_snapshots(BlockDriverState *bs,
> bool repair,
> sn->disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
> }
>
> + if (sn->extra_data_size >= endof(QCowSnapshotExtraData, icount)) {
> + sn->icount = be64_to_cpu(extra.icount);
> + } else {
> + sn->icount = -1ULL;
> + }
> +
> if (sn->extra_data_size > sizeof(extra)) {
> uint64_t extra_data_end;
> size_t unknown_extra_data_size;
> @@ -333,6 +339,7 @@ int qcow2_write_snapshots(BlockDriverState *bs)
> memset(&extra, 0, sizeof(extra));
> extra.vm_state_size_large = cpu_to_be64(sn->vm_state_size);
> extra.disk_size = cpu_to_be64(sn->disk_size);
> + extra.icount = cpu_to_be64(sn->icount);
>
> id_str_size = strlen(sn->id_str);
> name_size = strlen(sn->name);
> diff --git a/block/qcow2.h b/block/qcow2.h
> index b71e444fca..125ea9679b 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -206,6 +206,7 @@ typedef struct QEMU_PACKED QCowSnapshotHeader {
> typedef struct QEMU_PACKED QCowSnapshotExtraData {
> uint64_t vm_state_size_large;
> uint64_t disk_size;
> + uint64_t icount;
> } QCowSnapshotExtraData;
>
>
> @@ -219,6 +220,8 @@ typedef struct QCowSnapshot {
> uint32_t date_sec;
> uint32_t date_nsec;
> uint64_t vm_clock_nsec;
> + /* icount value for the moment when snapshot was taken */
> + uint64_t icount;
> /* Size of all extra data, including QCowSnapshotExtraData if available
> */
> uint32_t extra_data_size;
> /* Data beyond QCowSnapshotExtraData, if any */
> diff --git a/docs/interop/qcow2.txt b/docs/interop/qcow2.txt
> index 7da0d81df8..0463f761ef 100644
> --- a/docs/interop/qcow2.txt
> +++ b/docs/interop/qcow2.txt
> @@ -707,6 +707,11 @@ Snapshot table entry:
>
> Byte 48 - 55: Virtual disk size of the snapshot in
> bytes
>
> + Byte 56 - 63: icount value which corresponds to
> + the record/replay instruction count
> + when the snapshot was taken. Set to -1
> + if icount was disabled
> +
> Version 3 images must include extra data at least up to
> byte 55.
>
Hmm is this why I'm seeing some of the iotests fail on the CI:
261 fail [11:34:17] [11:34:44] output mismatch
(see 261.out.bad)
--- /builds/stsquad/qemu/tests/qemu-iotests/261.out 2020-10-01
11:16:22.000000000 +0000
+++ /builds/stsquad/qemu/build/tests/qemu-iotests/261.out.bad 2020-10-01
11:34:44.000000000 +0000
@@ -29,9 +29,10 @@
[0]
ID: 1
Name: sn0
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[1]
ID: 2
Name: sn1
@@ -42,9 +43,10 @@
[2]
ID: 3
Name: sn2
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
=== Repair botched v3 ===
@@ -61,9 +63,10 @@
[0]
ID: 1
Name: sn0
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[1]
ID: 2
Name: sn1
@@ -74,9 +77,10 @@
[2]
ID: 3
Name: sn2
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
=== Add new snapshot ===
@@ -85,9 +89,10 @@
[0]
ID: 1
Name: sn0
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[1]
ID: 2
Name: sn1
@@ -98,15 +103,17 @@
[2]
ID: 3
Name: sn2
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[3]
ID: 4
Name: sn3
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data:
=== Remove different snapshots ===
@@ -123,9 +130,10 @@
[1]
ID: 3
Name: sn2
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
--- sn1 ---
No errors were found on the image.
@@ -133,15 +141,17 @@
[0]
ID: 1
Name: sn0
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[1]
ID: 3
Name: sn2
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
--- sn2 ---
No errors were found on the image.
@@ -149,9 +159,10 @@
[0]
ID: 1
Name: sn0
- Extra data size: 16
+ Extra data size: 24
VM state size: 0
Disk size: 67108864
+ Unknown extra data: ��������
[1]
ID: 2
Name: sn1
@@ -210,7 +221,7 @@
No errors were found on the image.
507 snapshots should remain:
- qemu-img info reports 507 snapshots
+ qemu-img info reports 0 snapshots
Image header reports 507 snapshots
=== Snapshot table too big with one entry with too much extra data ===
@@ -341,6 +352,6 @@
No errors were found on the image.
65536 snapshots should remain:
- qemu-img info reports 65536 snapshots
+ qemu-img info reports 0 snapshots
Image header reports 65536 snapshots
*** done
--
Alex Bennée
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v6 03/14] qcow2: introduce icount field for snapshots,
Alex Bennée <=