qcow2: Reuse refcount table in calculate_refcounts()

We will later call calculate_refcounts multiple times, so reuse the
refcount table if possible.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Benoît Canet <benoit.canet@nodalink.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Max Reitz 2014-10-22 14:09:37 +02:00 committed by Kevin Wolf
parent 641bb63cd6
commit 9696df219a
1 changed files with 7 additions and 5 deletions

View File

@ -1661,10 +1661,12 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
QCowSnapshot *sn; QCowSnapshot *sn;
int ret; int ret;
*refcount_table = g_try_new0(uint16_t, *nb_clusters); if (!*refcount_table) {
if (*nb_clusters && *refcount_table == NULL) { *refcount_table = g_try_new0(uint16_t, *nb_clusters);
res->check_errors++; if (*nb_clusters && *refcount_table == NULL) {
return -ENOMEM; res->check_errors++;
return -ENOMEM;
}
} }
/* header */ /* header */
@ -1780,7 +1782,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
{ {
BDRVQcowState *s = bs->opaque; BDRVQcowState *s = bs->opaque;
int64_t size, highest_cluster, nb_clusters; int64_t size, highest_cluster, nb_clusters;
uint16_t *refcount_table; uint16_t *refcount_table = NULL;
int ret; int ret;
size = bdrv_getlength(bs->file); size = bdrv_getlength(bs->file);