From: Kevin Wolf <kwolf@redhat.com>
To: Federico Simoncelli <fsimonce@redhat.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] qemu-img: find the highest offset in use during check
Date: Mon, 10 Dec 2012 13:16:52 +0100 [thread overview]
Message-ID: <50C5D2B4.7070303@redhat.com> (raw)
In-Reply-To: <1355130833-4639-1-git-send-email-fsimonce@redhat.com>
Am 10.12.2012 10:13, schrieb Federico Simoncelli:
> This patch adds the support for reporting the highest offset in use by
> an image. This is particularly useful after a conversion (or a rebase)
> where the destination is a block device in order to find the actual
> amount of space in use.
>
> Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
> ---
> block.h | 1 +
> block/qcow2-refcount.c | 10 ++++++++--
> qemu-img.c | 4 ++++
> 3 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/block.h b/block.h
> index 722c620..de42e8c 100644
> --- a/block.h
> +++ b/block.h
> @@ -213,6 +213,7 @@ typedef struct BdrvCheckResult {
> int check_errors;
> int corruptions_fixed;
> int leaks_fixed;
> + int64_t highest_offset;
> BlockFragInfo bfi;
> } BdrvCheckResult;
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index 96224d1..017439d 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -1116,7 +1116,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> BdrvCheckMode fix)
> {
> BDRVQcowState *s = bs->opaque;
> - int64_t size, i;
> + int64_t size, i, highest_cluster;
> int nb_clusters, refcount1, refcount2;
> QCowSnapshot *sn;
> uint16_t *refcount_table;
> @@ -1154,7 +1154,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> s->refcount_table_offset,
> s->refcount_table_size * sizeof(uint64_t));
>
> - for(i = 0; i < s->refcount_table_size; i++) {
> + for(i = 0, highest_cluster = 0; i < s->refcount_table_size; i++) {
> uint64_t offset, cluster;
> offset = s->refcount_table[i];
> cluster = offset >> s->cluster_bits;
> @@ -1197,6 +1197,11 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> }
>
> refcount2 = refcount_table[i];
> +
> + if (refcount1 > 0 || refcount2 > 0) {
> + highest_cluster = i;
> + }
> +
> if (refcount1 != refcount2) {
>
> /* Check if we're allowed to fix the mismatch */
> @@ -1231,6 +1236,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
> }
> }
>
> + res->highest_offset = (highest_cluster + 1) * s->cluster_size;
> ret = 0;
>
> fail:
> diff --git a/qemu-img.c b/qemu-img.c
> index e29e01b..3a8090b 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -470,6 +470,10 @@ static int img_check(int argc, char **argv)
> result.bfi.fragmented_clusters * 100.0 / result.bfi.allocated_clusters);
> }
>
> + if (result.highest_offset > 0) {
> + printf("Highest offset in use: %lu\n", result.highest_offset);
highest_offset is not a unsigned long, but int64_t. Please use PRId64
instead of %lu.
I think we also need to change qemu-iotests so that it filters out these
lines, or many test cases would fail now. Or maybe we should think about
introducing a -v switch that enables the messages about fragmentation
and the highest offset.
Kevin
prev parent reply other threads:[~2012-12-10 12:17 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-10 9:13 [Qemu-devel] [PATCH] qemu-img: find the highest offset in use during check Federico Simoncelli
2012-12-10 12:16 ` Kevin Wolf [this message]
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=50C5D2B4.7070303@redhat.com \
--to=kwolf@redhat.com \
--cc=fsimonce@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.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.