From: Stefan Hajnoczi <stefanha@gmail.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>,
Peter Lieven <pl@kamp.de>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH v4 4/4] qcow2: Add full image preallocation option
Date: Fri, 17 Jan 2014 16:48:16 +0800 [thread overview]
Message-ID: <20140117084816.GC31039@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <25565d3a53f29829dc2d97480cb19ba34be49895.1388112645.git.hutao@cn.fujitsu.com>
On Fri, Dec 27, 2013 at 11:05:54AM +0800, Hu Tao wrote:
This approach seems okay but the calculation isn't quite right yet.
On Windows an error would be raised since we don't have preallocate=full
support. That's okay.
> @@ -1477,16 +1478,53 @@ static int qcow2_create2(const char *filename, int64_t total_size,
> Error *local_err = NULL;
> int ret;
>
> + if (prealloc == PREALLOC_MODE_FULL) {
> + int64_t meta_size = 0;
> + unsigned nrefe, nl2e;
> + BlockDriver *drv;
> +
> + drv = bdrv_find_protocol(filename, true);
> + if (drv == NULL) {
> + error_setg(errp, "Could not find protocol for file '%s'", filename);
> + return -ENOENT;
> + }
> +
> + alloc_options = append_option_parameters(alloc_options,
> + drv->create_options);
> + alloc_options = append_option_parameters(alloc_options, options);
> +
> + /* header: 1 cluster */
> + meta_size += cluster_size;
> + /* total size of refblocks */
> + nrefe = (total_size / cluster_size);
> + nrefe = align_offset(nrefe, cluster_size / sizeof(uint16_t));
> + meta_size += nrefe * sizeof(uint16_t);
Every host cluster is reference-counted, including metadata (even
refcount blocks are recursively included). This calculation is wrong
because it only considers data clusters.
> + /* total size of reftables */
> + meta_size += nrefe * sizeof(uint16_t) * sizeof(uint16_t) / cluster_size;
I don't understand this calculation. The refcount table consists of
contiguous clusters where each element is a 64-bit offset to a refcount
block.
> + /* total size of L2 tables */
> + nl2e = total_size / cluster_size;
> + nl2e = align_offset(nl2e, cluster_size / sizeof(uint64_t));
> + meta_size += nl2e * sizeof(uint64_t);
> + /* total size of L1 tables */
> + meta_size += nl2e * sizeof(uint64_t) * sizeof(uint64_t) / cluster_size;
Another strange calculation. The L1 table consists of contiguous
clusters where each element is a 64-bit offset to an L1 table.
next prev parent reply other threads:[~2014-01-17 8:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-27 3:05 [Qemu-devel] [RFC PATCH v4 0/4] qemu-img: add preallocation=full Hu Tao
2013-12-27 3:05 ` [Qemu-devel] [RFC PATCH v4 1/4] qapi: introduce PreallocMode Hu Tao
2013-12-27 3:05 ` [Qemu-devel] [RFC PATCH v4 2/4] raw, qcow2: don't convert file size to sector size Hu Tao
2013-12-27 3:05 ` [Qemu-devel] [RFC PATCH v4 3/4] raw-posix: Add full image preallocation option Hu Tao
2014-01-17 8:25 ` Stefan Hajnoczi
2014-01-20 2:19 ` Hu Tao
2014-01-17 8:56 ` Stefan Hajnoczi
2014-01-20 2:27 ` Hu Tao
2013-12-27 3:05 ` [Qemu-devel] [RFC PATCH v4 4/4] qcow2: " Hu Tao
2014-01-17 8:48 ` Stefan Hajnoczi [this message]
2014-01-20 2:16 ` Hu Tao
2014-02-07 2:22 ` Hu Tao
2014-01-06 7:27 ` [Qemu-devel] [RFC PATCH v4 0/4] qemu-img: add preallocation=full Hu Tao
2014-01-13 10:26 ` Hu Tao
2014-01-17 9:05 ` Stefan Hajnoczi
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=20140117084816.GC31039@stefanha-thinkpad.redhat.com \
--to=stefanha@gmail.com \
--cc=famz@redhat.com \
--cc=hutao@cn.fujitsu.com \
--cc=kwolf@redhat.com \
--cc=pl@kamp.de \
--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).