Some code in qcow2-snapshot.c directly accesses bs->file, so in those places errors can't be injected by other events. Since the code in qcow2-snapshot.c is similar to the other qcow2 internal code (in regards to e.g. the L1 table), add some debug events.
Signed-off-by: Wenchao Xia <xiaw...@linux.vnet.ibm.com> Reviewed-by: Max Reitz <mre...@redhat.com> --- block/blkdebug.c | 4 ++++ block/qcow2-snapshot.c | 3 +++ include/block/block.h | 4 ++++ 3 files changed, 11 insertions(+), 0 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 56c4cd0..6a94dfd 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -194,6 +194,10 @@ static const char *event_names[BLKDBG_EVENT_MAX] = { [BLKDBG_PWRITEV] = "pwritev", [BLKDBG_PWRITEV_ZERO] = "pwritev_zero", [BLKDBG_PWRITEV_DONE] = "pwritev_done", + + [BLKDBG_SNAPSHOT_L1_UPDATE] = "snapshot_l1_update", + [BLKDBG_SNAPSHOT_LIST_UPDATE] = "snapshot_list_update", + [BLKDBG_SNAPSHOT_HEADER_UPDATE] = "snapshot_header_update", }; static int get_event_by_name(const char *name, BlkDebugEvent *event) diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c index 12938a0..4746f80 100644 --- a/block/qcow2-snapshot.c +++ b/block/qcow2-snapshot.c @@ -209,6 +209,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs, } + BLKDBG_EVENT(bs->file, BLKDBG_SNAPSHOT_LIST_UPDATE); /* Write all snapshots to the new list */ for(i = 0; i < s->nb_snapshots; i++) { sn = s->snapshots + i; @@ -305,6 +306,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs, header_data.nb_snapshots = cpu_to_be32(s->nb_snapshots); header_data.snapshots_offset = cpu_to_be64(snapshots_offset); + BLKDBG_EVENT(bs->file, BLKDBG_SNAPSHOT_HEADER_UPDATE); ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots), &header_data, sizeof(header_data)); if (ret < 0) { @@ -475,6 +477,7 @@ void qcow2_snapshot_create(BlockDriverState *bs, goto dealloc_l1_table; } + BLKDBG_EVENT(bs->file, BLKDBG_SNAPSHOT_L1_UPDATE); ret = bdrv_pwrite(bs->file, sn->l1_table_offset, l1_table, s->l1_size * sizeof(uint64_t)); if (ret < 0) { diff --git a/include/block/block.h b/include/block/block.h index 963a61f..25bcdad 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -535,6 +535,10 @@ typedef enum { BLKDBG_PWRITEV_ZERO, BLKDBG_PWRITEV_DONE, + BLKDBG_SNAPSHOT_L1_UPDATE, + BLKDBG_SNAPSHOT_LIST_UPDATE, + BLKDBG_SNAPSHOT_HEADER_UPDATE, + BLKDBG_EVENT_MAX, } BlkDebugEvent; -- 1.7.1