On 05/08/2017 09:15 AM, Stefan Hajnoczi wrote: > The refcount metadata size calculation is inaccurate and can produce > numbers that are too small. This is bad because we should calculate a > conservative number - one that is guaranteed to be large enough. > > This patch switches the approach to a fixed point calculation because > the existing equation is hard to solve when inaccuracies are taken care > of. > > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > Reviewed-by: Alberto Garcia <be...@igalia.com> > --- > block/qcow2.c | 82 > ++++++++++++++++++++++++++++++----------------------------- > 1 file changed, 42 insertions(+), 40 deletions(-) >
> - nrefblocke = (aligned_total_size + meta_size + cluster_size) > - / (cluster_size - rces - rces * sizeof(uint64_t) > - / cluster_size); > - meta_size += DIV_ROUND_UP(nrefblocke, refblock_size) * cluster_size; > - > - /* total size of refcount tables */ > - nreftablee = nrefblocke / refblock_size; > - nreftablee = align_offset(nreftablee, cluster_size / sizeof(uint64_t)); > - meta_size += nreftablee * sizeof(uint64_t); > + /* total size of refcount table and blocks */ > + meta_size += qcow2_refcount_metadata_size( > + (meta_size + aligned_total_size) / cluster_size, How does this interact with Max's patch which avoids truncating division in favor of rounding up? https://lists.gnu.org/archive/html/qemu-devel/2017-05/msg00690.html -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature