[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 3/3] qcow2: Avoid memory over-allocation on c
From: |
Alberto Garcia |
Subject: |
Re: [Qemu-devel] [PATCH v2 3/3] qcow2: Avoid memory over-allocation on compressed images |
Date: |
Thu, 22 Feb 2018 11:50:36 +0100 |
User-agent: |
Notmuch/0.18.2 (http://notmuchmail.org) Emacs/24.4.1 (i586-pc-linux-gnu) |
On Thu 22 Feb 2018 12:39:53 AM CET, Eric Blake wrote:
> + assert(!!s->cluster_data == !!s->cluster_cache);
> + assert(csize < 2 * s->cluster_size + 512);
> if (!s->cluster_data) {
> - /* one more sector for decompressed data alignment */
> - s->cluster_data = qemu_try_blockalign(bs->file->bs,
> - QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size + 512);
> + s->cluster_data = g_try_malloc(2 * s->cluster_size + 512);
> if (!s->cluster_data) {
> return -ENOMEM;
> }
Why the "+ 512" ?
nb_csectors is guaranteed to be at most twice the cluster size, you can
even assert that:
int max_csize = (s->csize_mask + 1) * 512;
assert(max_csize == s->cluster_size * 2);
s->cluster_data = qemu_try_blockalign(bs->file->bs, max_csize);
And csize is at most (max_csize - sector_offset), so you can change your
assertion to this:
assert(csize <= 2 * s->cluster_size);
Berto