[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v11 32/34] qcow2: Allow preallocation and backing files if extend
From: |
Alberto Garcia |
Subject: |
[PATCH v11 32/34] qcow2: Allow preallocation and backing files if extended_l2 is set |
Date: |
Fri, 10 Jul 2020 18:13:14 +0200 |
Traditional qcow2 images don't allow preallocation if a backing file
is set. This is because once a cluster is allocated there is no way to
tell that its data should be read from the backing file.
Extended L2 entries have individual allocation bits for each
subcluster, and therefore it is perfectly possible to have an
allocated cluster with all its subclusters unallocated.
Signed-off-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
block/qcow2.c | 7 ++++---
tests/qemu-iotests/206.out | 2 +-
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index b7a1cae39c..806b194761 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3449,10 +3449,11 @@ qcow2_co_create(BlockdevCreateOptions *create_options,
Error **errp)
qcow2_opts->preallocation = PREALLOC_MODE_OFF;
}
if (qcow2_opts->has_backing_file &&
- qcow2_opts->preallocation != PREALLOC_MODE_OFF)
+ qcow2_opts->preallocation != PREALLOC_MODE_OFF &&
+ !qcow2_opts->extended_l2)
{
- error_setg(errp, "Backing file and preallocation cannot be used at "
- "the same time");
+ error_setg(errp, "Backing file and preallocation can only be used at "
+ "the same time if extended_l2 is on");
ret = -EINVAL;
goto out;
}
diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
index 363c5abe35..a100849fcb 100644
--- a/tests/qemu-iotests/206.out
+++ b/tests/qemu-iotests/206.out
@@ -203,7 +203,7 @@ Job failed: Different refcount widths than 16 bits require
compatibility level 1
=== Invalid backing file options ===
{"execute": "blockdev-create", "arguments": {"job-id": "job0", "options":
{"backing-file": "/dev/null", "driver": "qcow2", "file": "node0",
"preallocation": "full", "size": 67108864}}}
{"return": {}}
-Job failed: Backing file and preallocation cannot be used at the same time
+Job failed: Backing file and preallocation can only be used at the same time
if extended_l2 is on
{"execute": "job-dismiss", "arguments": {"id": "job0"}}
{"return": {}}
--
2.20.1
- [PATCH v11 13/34] qcow2: Update get/set_l2_entry() and add get/set_l2_bitmap(), (continued)
- [PATCH v11 13/34] qcow2: Update get/set_l2_entry() and add get/set_l2_bitmap(), Alberto Garcia, 2020/07/10
- [PATCH v11 04/34] qcow2: Split cluster_needs_cow() out of count_cow_clusters(), Alberto Garcia, 2020/07/10
- [PATCH v11 15/34] qcow2: Add qcow2_get_subcluster_range_type(), Alberto Garcia, 2020/07/10
- [PATCH v11 19/34] qcow2: Handle QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC, Alberto Garcia, 2020/07/10
- [PATCH v11 20/34] qcow2: Add subcluster support to calculate_l2_meta(), Alberto Garcia, 2020/07/10
- [PATCH v11 18/34] qcow2: Replace QCOW2_CLUSTER_* with QCOW2_SUBCLUSTER_*, Alberto Garcia, 2020/07/10
- [PATCH v11 09/34] qcow2: Add subcluster-related fields to BDRVQcow2State, Alberto Garcia, 2020/07/10
- [PATCH v11 11/34] qcow2: Add offset_into_subcluster() and size_to_subclusters(), Alberto Garcia, 2020/07/10
- [PATCH v11 10/34] qcow2: Add offset_to_sc_index(), Alberto Garcia, 2020/07/10
- [PATCH v11 14/34] qcow2: Add QCow2SubclusterType and qcow2_get_subcluster_type(), Alberto Garcia, 2020/07/10
- [PATCH v11 32/34] qcow2: Allow preallocation and backing files if extended_l2 is set,
Alberto Garcia <=
- [PATCH v11 22/34] qcow2: Add subcluster support to zero_in_l2_slice(), Alberto Garcia, 2020/07/10
- [PATCH v11 24/34] qcow2: Add subcluster support to check_refcounts_l2(), Alberto Garcia, 2020/07/10
- [PATCH v11 25/34] qcow2: Update L2 bitmap in qcow2_alloc_cluster_link_l2(), Alberto Garcia, 2020/07/10
- [PATCH v11 17/34] qcow2: Add cluster type parameter to qcow2_get_host_offset(), Alberto Garcia, 2020/07/10
- [PATCH v11 12/34] qcow2: Add l2_entry_size(), Alberto Garcia, 2020/07/10
- [PATCH v11 26/34] qcow2: Clear the L2 bitmap when allocating a compressed cluster, Alberto Garcia, 2020/07/10
- [PATCH v11 28/34] qcow2: Add subcluster support to qcow2_co_pwrite_zeroes(), Alberto Garcia, 2020/07/10
- [PATCH v11 21/34] qcow2: Add subcluster support to qcow2_get_host_offset(), Alberto Garcia, 2020/07/10
- [PATCH v11 29/34] qcow2: Add subcluster support to qcow2_measure(), Alberto Garcia, 2020/07/10
- [PATCH v11 34/34] iotests: Add tests for qcow2 images with extended L2 entries, Alberto Garcia, 2020/07/10