qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]