On 08.05.2017 17:00, Eric Blake wrote: > 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
From a quick glance, it looks like it just reimplements everything in a (hopefully) more understandable and "generous" way (which is good). So the only interaction is that the code that's removed/replaced is a bit different (which implies a rebase conflict, but one that should be resolved pretty easily). Max
signature.asc
Description: OpenPGP digital signature