aboutsummaryrefslogtreecommitdiff
path: root/block/qcow2.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2018-06-28 17:05:45 +0200
committerKevin Wolf <kwolf@redhat.com>2018-06-29 14:20:56 +0200
commit8b24cd141549b5b264baeddd4e72902cfb5de23b (patch)
tree2856eb7c876ed7578c0620270344b90b4d0bc6f9 /block/qcow2.c
parent93a3642efcadf4ad6045ccea38a05ff5297dfe26 (diff)
downloadqemu-8b24cd141549b5b264baeddd4e72902cfb5de23b.zip
qemu-8b24cd141549b5b264baeddd4e72902cfb5de23b.tar.gz
qemu-8b24cd141549b5b264baeddd4e72902cfb5de23b.tar.bz2
qcow2: Free allocated clusters on write error
If we managed to allocate the clusters, but then failed to write the data, there's a good chance that we'll still be able to free the clusters again in order to avoid cluster leaks (the refcounts are cached, so even if we can't write them out right now, we may be able to do so when the VM is resumed after a werror=stop/enospc pause). Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Tested-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block/qcow2.c')
-rw-r--r--block/qcow2.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/block/qcow2.c b/block/qcow2.c
index 78aeb1f..286640c 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1775,6 +1775,8 @@ static coroutine_fn int qcow2_handle_l2meta(BlockDriverState *bs,
if (ret) {
goto out;
}
+ } else {
+ qcow2_alloc_cluster_abort(bs, l2meta);
}
/* Take the request off the list of running requests */