[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 04/16] qcow2: Fail write_compressed when overwri
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [RFC PATCH 04/16] qcow2: Fail write_compressed when overwriting data |
Date: |
Tue, 27 Mar 2012 17:03:23 +0200 |
qcow2_alloc_compressed_cluster_offset() already fails if the copied flag
is set, because qcow2_write_compressed() doesn't perform COW as it would
have to do to allow this.
However, what we really want to check here is whether the cluster is
allocated or not. With internal snapshots the copied flag may not be set
on allocated clusters. Check the cluster offset instead.
Signed-off-by: Kevin Wolf <address@hidden>
---
block/qcow2-cluster.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 9547fa9..b26028c 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -571,15 +571,14 @@ uint64_t
qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
return 0;
}
+ /* Compression can't overwrite anything. Fail if the cluster was already
+ * allocated. */
cluster_offset = be64_to_cpu(l2_table[l2_index]);
- if (cluster_offset & QCOW_OFLAG_COPIED) {
+ if (cluster_offset & L2E_OFFSET_MASK) {
qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
return 0;
}
- if (cluster_offset)
- qcow2_free_any_clusters(bs, cluster_offset, 1);
-
cluster_offset = qcow2_alloc_bytes(bs, compressed_size);
if (cluster_offset < 0) {
qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
--
1.7.6.5
- [Qemu-devel] [RFC PATCH 00/16] qcow2: Basic version 3 support, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 08/16] qcow2: Ignore reserved bits in refcount table entries, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 03/16] qcow2: Ignore reserved bits in count_contiguous_clusters(), Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 05/16] qcow2: Ignore reserved bits in L1/L2 entries, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 12/16] qcow2: Support for feature table header extension, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 01/16] Specification for qcow2 version 3, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 04/16] qcow2: Fail write_compressed when overwriting data,
Kevin Wolf <=
- [Qemu-devel] [RFC PATCH 06/16] qcow2: Refactor qcow2_free_any_clusters, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 09/16] qcow2: Ignore reserved bits in check_refcounts, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 02/16] qcow2: Ignore reserved bits in get_cluster_offset, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 14/16] qemu-iotests: Test COW with zero clusters, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 11/16] qcow2: Support reading zero clusters, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 13/16] qemu-iotests: add a simple test for write_zeroes, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 15/16] qcow2: Zero write support, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 16/16] qemu-iotests: use qcow3, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 10/16] qcow2: Version 3 images, Kevin Wolf, 2012/03/27
- [Qemu-devel] [RFC PATCH 07/16] qcow2: Simplify count_cow_clusters, Kevin Wolf, 2012/03/27