From: "Benoît Canet" <benoit.canet@irqsave.net>
To: Max Reitz <mreitz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH alt 5/7] block/qcow2: Make get_refcount() global
Date: Thu, 31 Jul 2014 10:09:05 +0200 [thread overview]
Message-ID: <20140731080904.GJ707@irqsave.net> (raw)
In-Reply-To: <1406402531-9278-6-git-send-email-mreitz@redhat.com>
The Saturday 26 Jul 2014 à 21:22:09 (+0200), Max Reitz wrote :
> Reading the refcount of a cluster is an operation which can be useful in
> all of the qcow2 code, so make that function globally available.
>
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
> block/qcow2-refcount.c | 23 ++++++++++++-----------
> block/qcow2.h | 2 ++
> 2 files changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index cc6cf74..0c9887b 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -87,7 +87,7 @@ static int load_refcount_block(BlockDriverState *bs,
> * return value is the refcount of the cluster, negative values are -errno
> * and indicate an error.
> */
> -static int get_refcount(BlockDriverState *bs, int64_t cluster_index)
> +int qcow2_get_refcount(BlockDriverState *bs, int64_t cluster_index)
> {
> BDRVQcowState *s = bs->opaque;
> uint64_t refcount_table_index, block_index;
> @@ -625,7 +625,7 @@ int qcow2_update_cluster_refcount(BlockDriverState *bs,
> return ret;
> }
>
> - return get_refcount(bs, cluster_index);
> + return qcow2_get_refcount(bs, cluster_index);
> }
>
>
> @@ -646,7 +646,7 @@ static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size)
> retry:
> for(i = 0; i < nb_clusters; i++) {
> uint64_t next_cluster_index = s->free_cluster_index++;
> - refcount = get_refcount(bs, next_cluster_index);
> + refcount = qcow2_get_refcount(bs, next_cluster_index);
>
> if (refcount < 0) {
> return refcount;
> @@ -710,7 +710,7 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset,
> /* Check how many clusters there are free */
> cluster_index = offset >> s->cluster_bits;
> for(i = 0; i < nb_clusters; i++) {
> - refcount = get_refcount(bs, cluster_index++);
> + refcount = qcow2_get_refcount(bs, cluster_index++);
>
> if (refcount < 0) {
> return refcount;
> @@ -927,7 +927,7 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
> cluster_index, addend,
> QCOW2_DISCARD_SNAPSHOT);
> } else {
> - refcount = get_refcount(bs, cluster_index);
> + refcount = qcow2_get_refcount(bs, cluster_index);
> }
>
> if (refcount < 0) {
> @@ -967,7 +967,7 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
> refcount = qcow2_update_cluster_refcount(bs, l2_offset >>
> s->cluster_bits, addend, QCOW2_DISCARD_SNAPSHOT);
> } else {
> - refcount = get_refcount(bs, l2_offset >> s->cluster_bits);
> + refcount = qcow2_get_refcount(bs, l2_offset >> s->cluster_bits);
> }
> if (refcount < 0) {
> ret = refcount;
> @@ -1243,8 +1243,8 @@ fail:
> * Checks the OFLAG_COPIED flag for all L1 and L2 entries.
> *
> * This function does not print an error message nor does it increment
> - * check_errors if get_refcount fails (this is because such an error will have
> - * been already detected and sufficiently signaled by the calling function
> + * check_errors if qcow2_get_refcount fails (this is because such an error will
> + * have been already detected and sufficiently signaled by the calling function
> * (qcow2_check_refcounts) by the time this function is called).
> */
> static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
> @@ -1265,7 +1265,7 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
> continue;
> }
>
> - refcount = get_refcount(bs, l2_offset >> s->cluster_bits);
> + refcount = qcow2_get_refcount(bs, l2_offset >> s->cluster_bits);
> if (refcount < 0) {
> /* don't print message nor increment check_errors */
> continue;
> @@ -1307,7 +1307,8 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
>
> if ((cluster_type == QCOW2_CLUSTER_NORMAL) ||
> ((cluster_type == QCOW2_CLUSTER_ZERO) && (data_offset != 0))) {
> - refcount = get_refcount(bs, data_offset >> s->cluster_bits);
> + refcount = qcow2_get_refcount(bs,
> + data_offset >> s->cluster_bits);
> if (refcount < 0) {
> /* don't print message nor increment check_errors */
> continue;
> @@ -1597,7 +1598,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
>
> /* compare ref counts */
> for (i = 0, highest_cluster = 0; i < nb_clusters; i++) {
> - refcount1 = get_refcount(bs, i);
> + refcount1 = qcow2_get_refcount(bs, i);
> if (refcount1 < 0) {
> fprintf(stderr, "Can't get refcount for cluster %" PRId64 ": %s\n",
> i, strerror(-refcount1));
> diff --git a/block/qcow2.h b/block/qcow2.h
> index 1c4f9bf..c0e1b7b 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -472,6 +472,8 @@ int qcow2_update_header(BlockDriverState *bs);
> int qcow2_refcount_init(BlockDriverState *bs);
> void qcow2_refcount_close(BlockDriverState *bs);
>
> +int qcow2_get_refcount(BlockDriverState *bs, int64_t cluster_index);
> +
> int qcow2_update_cluster_refcount(BlockDriverState *bs, int64_t cluster_index,
> int addend, enum qcow2_discard_type type);
>
> --
> 2.0.3
>
>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
next prev parent reply other threads:[~2014-07-31 8:10 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-26 19:22 [Qemu-devel] [PATCH alt 0/7] block/qcow2: Improve zero cluster expansion Max Reitz
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 1/7] block: Add status callback to bdrv_amend_options() Max Reitz
2014-07-31 7:51 ` Benoît Canet
2014-07-31 8:07 ` Benoît Canet
2014-08-01 20:06 ` Max Reitz
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 2/7] qemu-img: Add progress output for amend Max Reitz
2014-07-31 7:56 ` Benoît Canet
2014-08-01 20:09 ` Max Reitz
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 3/7] qemu-img: Fix insignifcant memleak Max Reitz
2014-07-30 14:58 ` Eric Blake
2014-07-30 20:08 ` Max Reitz
2014-07-31 7:59 ` Benoît Canet
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 4/7] block/qcow2: Implement status CB for amend Max Reitz
2014-07-30 16:28 ` Eric Blake
2014-07-31 8:06 ` Benoît Canet
2014-08-01 20:18 ` Max Reitz
2014-08-01 20:38 ` Eric Blake
2014-08-01 20:48 ` Max Reitz
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 5/7] block/qcow2: Make get_refcount() global Max Reitz
2014-07-31 8:09 ` Benoît Canet [this message]
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 6/7] block/qcow2: Simplify shared L2 handling in amend Max Reitz
2014-07-31 8:24 ` Benoît Canet
2014-08-01 20:51 ` Max Reitz
2014-07-26 19:22 ` [Qemu-devel] [PATCH alt 7/7] iotests: Expand test 061 Max Reitz
2014-07-31 8:30 ` Benoît Canet
2014-08-01 20:34 ` Max Reitz
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=20140731080904.GJ707@irqsave.net \
--to=benoit.canet@irqsave.net \
--cc=kwolf@redhat.com \
--cc=mreitz@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.