diff options
author | Max Reitz <mreitz@redhat.com> | 2019-10-11 17:28:07 +0200 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2019-10-28 11:54:01 +0100 |
commit | fe446b5da225b551fc6493890d437fe4a8ba7552 (patch) | |
tree | 505c146a14f09c52e90ae56aba4835cbf300b3d8 /block/qcow2.c | |
parent | 8bc584fe035d98b8aca4fcc818617c91df0ed925 (diff) | |
download | qemu-fe446b5da225b551fc6493890d437fe4a8ba7552.zip qemu-fe446b5da225b551fc6493890d437fe4a8ba7552.tar.gz qemu-fe446b5da225b551fc6493890d437fe4a8ba7552.tar.bz2 |
qcow2: Add qcow2_check_fix_snapshot_table()
qcow2_check_read_snapshot_table() can perform consistency checks, but it
cannot fix everything. Specifically, it cannot allocate new clusters,
because that should wait until the refcount structures are known to be
consistent (i.e., after qcow2_check_refcounts()). Thus, it cannot call
qcow2_write_snapshots().
Do that in qcow2_check_fix_snapshot_table(), which is called after
qcow2_check_refcounts().
Currently, there is nothing that would set result->corruptions, so this
is a no-op. A follow-up patch will change that.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20191011152814.14791-10-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'block/qcow2.c')
-rw-r--r-- | block/qcow2.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/block/qcow2.c b/block/qcow2.c index b0026e8..8d4f38a 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -597,14 +597,21 @@ static int coroutine_fn qcow2_co_check_locked(BlockDriverState *bs, memset(result, 0, sizeof(*result)); ret = qcow2_check_read_snapshot_table(bs, &snapshot_res, fix); - qcow2_add_check_result(result, &snapshot_res, false); if (ret < 0) { + qcow2_add_check_result(result, &snapshot_res, false); return ret; } ret = qcow2_check_refcounts(bs, &refcount_res, fix); qcow2_add_check_result(result, &refcount_res, true); if (ret < 0) { + qcow2_add_check_result(result, &snapshot_res, false); + return ret; + } + + ret = qcow2_check_fix_snapshot_table(bs, &snapshot_res, fix); + qcow2_add_check_result(result, &snapshot_res, false); + if (ret < 0) { return ret; } |