[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 6/6] qcow2: Allow lazy refcounts to be enabled o
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [RFC PATCH 6/6] qcow2: Allow lazy refcounts to be enabled on the command line |
Date: |
Wed, 27 Feb 2013 18:25:55 +0100 |
qcow2 images now accept a boolean lazy_refcouns options. Use it like
this:
-drive file=test.qcow2,lazy_refcounts=on
If the option is specified on the comman line, it overrides the default
specified by the qcow2 header flags that were set when creating the
image.
Signed-off-by: Kevin Wolf <address@hidden>
---
block/qcow2-cluster.c | 2 +-
block/qcow2.c | 20 ++++++++++++++++++++
block/qcow2.h | 1 +
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 56fccf9..ff9ae18 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -668,7 +668,7 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs,
QCowL2Meta *m)
}
/* Update L2 table. */
- if (s->compatible_features & QCOW2_COMPAT_LAZY_REFCOUNTS) {
+ if (s->use_lazy_refcounts) {
qcow2_mark_dirty(bs);
}
if (qcow2_need_accurate_refcounts(s)) {
diff --git a/block/qcow2.c b/block/qcow2.c
index f5e4269..fedb35d 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -495,6 +495,26 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags)
}
}
+ /* Enable lazy_refcounts according to image and command line options */
+ if (qdict_haskey(options, "lazy_refcounts")) {
+ const char *value = qdict_get_str(options, "lazy_refcounts");
+ if (!strcmp(value, "on")) {
+ s->use_lazy_refcounts = true;
+ } else if (!strcmp(value, "off")) {
+ s->use_lazy_refcounts = false;
+ } else {
+ qerror_report(QERR_INVALID_PARAMETER_VALUE,
+ "lazy_refcounts", "'on' or 'off'");
+ ret = -EINVAL;
+ goto fail;
+ }
+ qdict_del(options, "lazy_refcounts");
+ } else {
+ s->use_lazy_refcounts =
+ (s->compatible_features & QCOW2_COMPAT_LAZY_REFCOUNTS);
+ }
+
+
#ifdef DEBUG_ALLOC
{
BdrvCheckResult result = {0};
diff --git a/block/qcow2.h b/block/qcow2.h
index 718b52b..103abdb 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -173,6 +173,7 @@ typedef struct BDRVQcowState {
int flags;
int qcow_version;
+ bool use_lazy_refcounts;
uint64_t incompatible_features;
uint64_t compatible_features;
--
1.8.1.2
- [Qemu-devel] [RFC PATCH 0/6] block: Add driver specific options, Kevin Wolf, 2013/02/27
- [Qemu-devel] [RFC PATCH 3/6] Add qdict_clone_shallow(), Kevin Wolf, 2013/02/27
- [Qemu-devel] [RFC PATCH 2/6] block: Add options QDict to bdrv_open() prototype, Kevin Wolf, 2013/02/27
- [Qemu-devel] [RFC PATCH 1/6] block: Add options QDict to .bdrv_open(), Kevin Wolf, 2013/02/27
- [Qemu-devel] [RFC PATCH 5/6] block: Support driver specific options in drive_init(), Kevin Wolf, 2013/02/27
- [Qemu-devel] [RFC PATCH 6/6] qcow2: Allow lazy refcounts to be enabled on the command line,
Kevin Wolf <=
- [Qemu-devel] [RFC PATCH 4/6] block: Add options QDict to bdrv_open_common(), Kevin Wolf, 2013/02/27
- Re: [Qemu-devel] [RFC PATCH 0/6] block: Add driver specific options, Eric Blake, 2013/02/27
- Re: [Qemu-devel] [RFC PATCH 0/6] block: Add driver specific options, Stefan Hajnoczi, 2013/02/28