qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Benoît Canet" <benoit@irqsave.net>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, "Benoît Canet" <benoit@irqsave.net>,
	stefanha@redhat.com
Subject: [Qemu-devel] [RFC V2 05/20] qcow2: Rename update_refcount into qcow2_update_refcount.
Date: Wed, 17 Oct 2012 18:00:14 +0200	[thread overview]
Message-ID: <1350489629-1838-6-git-send-email-benoit@irqsave.net> (raw)
In-Reply-To: <1350489629-1838-1-git-send-email-benoit@irqsave.net>

Also make it public so qcow2-dedup.c can use it.
---
 block/qcow2-refcount.c |   38 +++++++++++++++++++-------------------
 block/qcow2.h          |    4 +++-
 2 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index 5e3f915..692f3fb 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -27,9 +27,6 @@
 #include "block/qcow2.h"
 
 static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size);
-static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
-                            int64_t offset, int64_t length,
-                            int addend);
 
 
 /*********************************************************/
@@ -188,10 +185,11 @@ static int alloc_refcount_block(BlockDriverState *bs,
      *   recursion. Instead we must place the refcount blocks in a way that
      *   they can describe them themselves.
      *
-     * - We need to consider that at this point we are inside update_refcounts
-     *   and doing the initial refcount increase. This means that some clusters
-     *   have already been allocated by the caller, but their refcount isn't
-     *   accurate yet. free_cluster_index tells us where this allocation ends
+     * - We need to consider that at this point we are inside
+     *   qcow2_update_refcounts and doing the initial refcount increase.
+     *   This means that some clusters have already been allocated by the
+     *   caller, but their refcount isn't accurate yet.
+     *   free_cluster_index tells us where this allocation ends
      *   as long as we don't overwrite it by freeing clusters.
      *
      * - alloc_clusters_noref and qcow2_free_clusters may load a different
@@ -232,7 +230,7 @@ static int alloc_refcount_block(BlockDriverState *bs,
     } else {
         /* Described somewhere else. This can recurse at most twice before we
          * arrive at a block that describes itself. */
-        ret = update_refcount(bs, new_block, s->cluster_size, 1);
+        ret = qcow2_update_refcount(bs, new_block, s->cluster_size, 1);
         if (ret < 0) {
             goto fail_block;
         }
@@ -240,7 +238,7 @@ static int alloc_refcount_block(BlockDriverState *bs,
         bdrv_flush(bs->file);
 
         /* Initialize the new refcount block only after updating its refcount,
-         * update_refcount uses the refcount cache itself */
+         * qcow2_update_refcount uses the refcount cache itself */
         ret = qcow2_cache_get_empty(bs, s->refcount_block_cache, new_block,
             (void**) refcount_block);
         if (ret < 0) {
@@ -412,7 +410,7 @@ fail_block:
 }
 
 /* XXX: cache several refcount block clusters ? */
-static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
+int QEMU_WARN_UNUSED_RESULT qcow2_update_refcount(BlockDriverState *bs,
     int64_t offset, int64_t length, int addend)
 {
     BDRVQcowState *s = bs->opaque;
@@ -422,8 +420,8 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,
     int ret;
 
 #ifdef DEBUG_ALLOC2
-    fprintf(stderr, "update_refcount: offset=%" PRId64 " size=%" PRId64 " addend=%d\n",
-           offset, length, addend);
+    fprintf(stderr, "qcow2_update_refcount: offset=%" PRId64
+           " size=%" PRId64 " addend=%d\n", offset, length, addend);
 #endif
     if (length < 0) {
         return -EINVAL;
@@ -499,7 +497,8 @@ fail:
      */
     if (ret < 0) {
         int dummy;
-        dummy = update_refcount(bs, offset, cluster_offset - offset, -addend);
+        dummy = qcow2_update_refcount(bs, offset,
+                                      cluster_offset - offset, -addend);
         (void)dummy;
     }
 
@@ -520,7 +519,8 @@ static int update_cluster_refcount(BlockDriverState *bs,
     BDRVQcowState *s = bs->opaque;
     int ret;
 
-    ret = update_refcount(bs, cluster_index << s->cluster_bits, 1, addend);
+    ret = qcow2_update_refcount(bs, cluster_index << s->cluster_bits,
+                                1, addend);
     if (ret < 0) {
         return ret;
     }
@@ -574,7 +574,7 @@ int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size)
         return offset;
     }
 
-    ret = update_refcount(bs, offset, size, 1);
+    ret = qcow2_update_refcount(bs, offset, size, 1);
     if (ret < 0) {
         return ret;
     }
@@ -606,7 +606,7 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset,
     old_free_cluster_index = s->free_cluster_index;
     s->free_cluster_index = cluster_index + i;
 
-    ret = update_refcount(bs, offset, i << s->cluster_bits, 1);
+    ret = qcow2_update_refcount(bs, offset, i << s->cluster_bits, 1);
     if (ret < 0) {
         return ret;
     }
@@ -672,7 +672,7 @@ void qcow2_free_clusters(BlockDriverState *bs,
     int ret;
 
     BLKDBG_EVENT(bs->file, BLKDBG_CLUSTER_FREE);
-    ret = update_refcount(bs, offset, size, -1);
+    ret = qcow2_update_refcount(bs, offset, size, -1);
     if (ret < 0) {
         fprintf(stderr, "qcow2_free_clusters failed: %s\n", strerror(-ret));
         /* TODO Remember the clusters to free them later and avoid leaking */
@@ -779,7 +779,7 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
                                        s->csize_mask) + 1;
                         if (addend != 0) {
                             int ret;
-                            ret = update_refcount(bs,
+                            ret = qcow2_update_refcount(bs,
                                 (offset & s->cluster_offset_mask) & ~511,
                                 nb_csectors * 512, addend);
                             if (ret < 0) {
@@ -1213,7 +1213,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
                    i, refcount1, refcount2);
 
             if (num_fixed) {
-                ret = update_refcount(bs, i << s->cluster_bits, 1,
+                ret = qcow2_update_refcount(bs, i << s->cluster_bits, 1,
                                       refcount2 - refcount1);
                 if (ret >= 0) {
                     (*num_fixed)++;
diff --git a/block/qcow2.h b/block/qcow2.h
index 6e867c8..77c0f2b 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -292,7 +292,9 @@ int qcow2_update_header(BlockDriverState *bs);
 /* qcow2-refcount.c functions */
 int qcow2_refcount_init(BlockDriverState *bs);
 void qcow2_refcount_close(BlockDriverState *bs);
-
+int QEMU_WARN_UNUSED_RESULT qcow2_update_refcount(BlockDriverState *bs,
+                            int64_t offset, int64_t length,
+                            int addend);
 int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size);
 int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset,
     int nb_clusters);
-- 
1.7.10.4

  parent reply	other threads:[~2012-10-17 16:08 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-17 16:00 [Qemu-devel] [RFC V2 00/20] QCOW2 deduplication Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 01/20] qcow2: Add deduplication to the qcow2 specification Benoît Canet
2012-10-17 16:28   ` Eric Blake
2012-10-18  9:06     ` Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 02/20] qcow2: Add kernel red black trees Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 03/20] qcow2: Add deduplication structures and fields Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 04/20] qcow2: Add qcow2_dedup_read_missing_and_concatenate Benoît Canet
2012-10-17 16:00 ` Benoît Canet [this message]
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 06/20] qcow2: Add qcow2_dedup and related functions Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 07/20] qcow2: Add qcow2_dedup_write_new_hashes Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 08/20] qcow2: Implement qcow2_compute_cluster_hash Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 09/20] qcow2: Add qcow2_co_load_dedup_hashes Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 10/20] qcow2: Add qcow2_dedup_grow_table Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 11/20] qcow2: Load and save deduplication table header extension Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 12/20] qcow2: Extract qcow2_do_table_init Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 13/20] qcow2: Add qcow2_dedup_init and qcow2_dedup_close Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 14/20] qcow2: Extract qcow2_add_feature and qcow2_remove_feature Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 15/20] block: Add dedup image create option Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 16/20] qcow2: Allow creation of images using deduplication Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 17/20] qcow2: Integrate deduplication in qcow2_co_writev loop Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 18/20] qcow2: Add method to destroy the deduplication red black tree Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 19/20] qcow2: init and cleanup deduplication Benoît Canet
2012-10-17 16:00 ` [Qemu-devel] [RFC V2 20/20] qemu-iotests: Filter dedup=on/off so existing tests don't break Benoît Canet
2012-10-17 17:09 ` [Qemu-devel] [RFC V2 00/20] QCOW2 deduplication Avi Kivity
2012-10-18  8:32   ` Benoît Canet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1350489629-1838-6-git-send-email-benoit@irqsave.net \
    --to=benoit@irqsave.net \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).