From: Uri Lublin <uril@redhat.com>
To: qemu-devel@nongnu.org
Cc: Uri Lublin <uril@redhat.com>
Subject: [Qemu-devel] [PATCH 05/14] block-qcow2: keep highest allocated offset
Date: Tue, 17 Mar 2009 22:40:43 +0200 [thread overview]
Message-ID: <1237322452-11337-6-git-send-email-uril@redhat.com> (raw)
In-Reply-To: <1237322452-11337-5-git-send-email-uril@redhat.com>
We want to know the highest written offset for qcow2 images.
This gives a pretty good (and easy to calculate) estimation to how
much more allocation can be done for the block device.
It can be usefull for allocating more diskspace for that image
(if possible, e.g. lvm) before we run out-of-disk-space
It does not help images which are files in a file system.
The highest allocated offset is updated only upon cluster
allocation (with highest offset).
Currently, since we do not want to scan the refcount table (as
it takes a lot of time), highest-alloc is initialized to 0.
That means it may be inaccurate, but still is useful.
A following patch would keep highest-alloc in a qcow2-extension,
which would make it accurate.
Signed-off-by: Uri Lublin <uril@redhat.com>
---
block-qcow2.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/block-qcow2.c b/block-qcow2.c
index 8a910fa..c070e05 100644
--- a/block-qcow2.c
+++ b/block-qcow2.c
@@ -153,6 +153,9 @@ typedef struct BDRVQcowState {
uint32_t crypt_method_header;
AES_KEY aes_encrypt_key;
AES_KEY aes_decrypt_key;
+
+ int64_t highest_alloc; /* highest cluester allocated (in clusters) */
+
uint64_t snapshots_offset;
int snapshots_size;
int nb_snapshots;
@@ -360,6 +363,8 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags)
if (qcow_read_extensions(bs, sizeof(header), ext_end))
goto fail;
+ s->highest_alloc = 0;
+
/* read the backing file name */
if (header.backing_file_offset != 0) {
len = header.backing_file_size;
@@ -2316,6 +2321,10 @@ retry:
size,
(s->free_cluster_index - nb_clusters) << s->cluster_bits);
#endif
+
+ if (s->highest_alloc < s->free_cluster_index)
+ s->highest_alloc = s->free_cluster_index;
+
return (s->free_cluster_index - nb_clusters) << s->cluster_bits;
}
--
1.6.0.6
next prev parent reply other threads:[~2009-03-17 20:41 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-17 20:40 [Qemu-devel] [PATCH 00/14] block (mostly qcow2) changes (v6) Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 01/14] Introducing qcow2 extensions Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 02/14] block: support known backing format for image create and open Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 03/14] block-qcow2: keep backing file format in a qcow2 extension Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 04/14] qemu-img: adding a "-F base_fmt" option to "qemu-img create -b" Uri Lublin
2009-03-17 20:40 ` Uri Lublin [this message]
2009-03-17 20:40 ` [Qemu-devel] [PATCH 06/14] block-qcow2: export highest-alloc through BlockDriverInfo and get_info() Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 07/14] block: info blockstats: show highest_allocated if exists Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 08/14] Add a bdrv_close_all() and call it at the end of main() Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 09/14] block-qcow2: keep highest alloc offset in a qcow2 extension Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 10/14] qemu-img: info: show highest_alloc if exists Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 11/14] qcow2: qcow_read_extensions: make "advance offset over extension" common Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 12/14] block: pass BDRV_BACKING flag to open of a backing file Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 13/14] block: keep flags an image was opened with Uri Lublin
2009-03-17 20:40 ` [Qemu-devel] [PATCH 14/14] block-qcow2: do not keep track of highest-alloc for backing files Uri Lublin
2009-03-24 11:22 ` [Qemu-devel] [PATCH 00/14] block (mostly qcow2) changes (v6) Gleb Natapov
2009-03-24 11:44 ` Avi Kivity
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=1237322452-11337-6-git-send-email-uril@redhat.com \
--to=uril@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).