[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/14] block-qcow2: keep highest allocated offset
From: |
Uri Lublin |
Subject: |
[Qemu-devel] [PATCH 05/14] block-qcow2: keep highest allocated offset |
Date: |
Tue, 17 Mar 2009 22:40:43 +0200 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH 00/14] block (mostly qcow2) changes (v6), Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 01/14] Introducing qcow2 extensions, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 02/14] block: support known backing format for image create and open, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 03/14] block-qcow2: keep backing file format in a qcow2 extension, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 04/14] qemu-img: adding a "-F base_fmt" option to "qemu-img create -b", Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 05/14] block-qcow2: keep highest allocated offset,
Uri Lublin <=
- [Qemu-devel] [PATCH 06/14] block-qcow2: export highest-alloc through BlockDriverInfo and get_info(), Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 07/14] block: info blockstats: show highest_allocated if exists, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 08/14] Add a bdrv_close_all() and call it at the end of main(), Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 09/14] block-qcow2: keep highest alloc offset in a qcow2 extension, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 10/14] qemu-img: info: show highest_alloc if exists, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 11/14] qcow2: qcow_read_extensions: make "advance offset over extension" common, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 12/14] block: pass BDRV_BACKING flag to open of a backing file, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 13/14] block: keep flags an image was opened with, Uri Lublin, 2009/03/17
- [Qemu-devel] [PATCH 14/14] block-qcow2: do not keep track of highest-alloc for backing files, Uri Lublin, 2009/03/17
Re: [Qemu-devel] [PATCH 00/14] block (mostly qcow2) changes (v6), Gleb Natapov, 2009/03/24