[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 07/17] qcow2: introduce icount field for snapsho
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH 07/17] qcow2: introduce icount field for snapshots |
Date: |
Wed, 25 Apr 2018 15:46:14 +0300 |
User-agent: |
StGit/0.17.1-dirty |
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 <address@hidden>
---
block/qcow2-snapshot.c | 9 +++++++++
block/qcow2.h | 2 ++
2 files changed, 11 insertions(+)
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index 74293be..4f2357e 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -103,6 +103,12 @@ int qcow2_read_snapshots(BlockDriverState *bs)
sn->disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
}
+ if (extra_data_size >= 24) {
+ sn->icount = be64_to_cpu(extra.icount);
+ } else {
+ sn->icount = 0;
+ }
+
/* Read snapshot ID */
sn->id_str = g_malloc(id_str_size + 1);
ret = bdrv_pread(bs->file, offset, sn->id_str, id_str_size);
@@ -209,6 +215,7 @@ static 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);
@@ -372,6 +379,7 @@ int qcow2_snapshot_create(BlockDriverState *bs,
QEMUSnapshotInfo *sn_info)
sn->date_sec = sn_info->date_sec;
sn->date_nsec = sn_info->date_nsec;
sn->vm_clock_nsec = sn_info->vm_clock_nsec;
+ sn->icount = sn_info->icount;
/* Allocate the L1 table of the snapshot and copy the current one there. */
l1_table_offset = qcow2_alloc_clusters(bs, s->l1_size * sizeof(uint64_t));
@@ -691,6 +699,7 @@ int qcow2_snapshot_list(BlockDriverState *bs,
QEMUSnapshotInfo **psn_tab)
sn_info->date_sec = sn->date_sec;
sn_info->date_nsec = sn->date_nsec;
sn_info->vm_clock_nsec = sn->vm_clock_nsec;
+ sn_info->icount = sn->icount;
}
*psn_tab = sn_tab;
return s->nb_snapshots;
diff --git a/block/qcow2.h b/block/qcow2.h
index adf5c39..8880937 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -151,6 +151,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;
@@ -164,6 +165,7 @@ typedef struct QCowSnapshot {
uint32_t date_sec;
uint32_t date_nsec;
uint64_t vm_clock_nsec;
+ uint64_t icount;
} QCowSnapshot;
struct Qcow2Cache;
- [Qemu-devel] [RFC PATCH 00/17] reverse debugging, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 01/17] block: implement bdrv_snapshot_goto for blkreplay, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 02/17] replay: disable default snapshot for record/replay, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 03/17] replay: update docs for record/replay with block devices, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 04/17] replay: don't drain/flush bdrv queue while RR is working, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 06/17] migration: introduce icount field for snapshots, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 05/17] replay: finish record/replay before closing the disks, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 07/17] qcow2: introduce icount field for snapshots,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH 08/17] replay: introduce info hmp/qmp command, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 09/17] replay: introduce breakpoint at the specified step, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 10/17] replay: implement replay_seek command to proceed to the desired step, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 11/17] replay: flush events when exitting, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 12/17] timer: remove replay clock probe in deadline calculation, Pavel Dovgalyuk, 2018/04/25
- [Qemu-devel] [RFC PATCH 13/17] replay: refine replay-time module, Pavel Dovgalyuk, 2018/04/25