From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37074) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XNTvD-0006y7-Tm for qemu-devel@nongnu.org; Fri, 29 Aug 2014 17:41:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XNTv7-00086A-Gl for qemu-devel@nongnu.org; Fri, 29 Aug 2014 17:41:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19965) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XNTv7-00085y-8w for qemu-devel@nongnu.org; Fri, 29 Aug 2014 17:41:21 -0400 From: Max Reitz Date: Fri, 29 Aug 2014 23:40:56 +0200 Message-Id: <1409348463-16627-5-git-send-email-mreitz@redhat.com> In-Reply-To: <1409348463-16627-1-git-send-email-mreitz@redhat.com> References: <1409348463-16627-1-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v5 04/11] qcow2: Pull check_refblocks() up List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi , =?UTF-8?q?Beno=C3=AEt=20Canet?= , Max Reitz Pull check_refblocks() before calculate_refcounts() so we can drop its static declaration. Signed-off-by: Max Reitz Reviewed-by: Beno=C3=AEt Canet --- block/qcow2-refcount.c | 102 ++++++++++++++++++++++++-------------------= ------ 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 5f0920b..2b728ef 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -1496,59 +1496,6 @@ done: return new_offset; } =20 -static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, - BdrvCheckMode fix, uint16_t **refcount_table, - int64_t *nb_clusters); - -/* - * Calculates an in-memory refcount table. - */ -static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *re= s, - BdrvCheckMode fix, uint16_t **refcount_ta= ble, - int64_t *nb_clusters) -{ - BDRVQcowState *s =3D bs->opaque; - int64_t i; - QCowSnapshot *sn; - int ret; - - *refcount_table =3D g_try_new0(uint16_t, *nb_clusters); - if (*nb_clusters && *refcount_table =3D=3D NULL) { - res->check_errors++; - return -ENOMEM; - } - - /* header */ - inc_refcounts(bs, res, *refcount_table, *nb_clusters, - 0, s->cluster_size); - - /* current L1 table */ - ret =3D check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, - s->l1_table_offset, s->l1_size, CHECK_FRAG_= INFO); - if (ret < 0) { - return ret; - } - - /* snapshots */ - for (i =3D 0; i < s->nb_snapshots; i++) { - sn =3D s->snapshots + i; - ret =3D check_refcounts_l1(bs, res, *refcount_table, *nb_cluster= s, - sn->l1_table_offset, sn->l1_size, 0); - if (ret < 0) { - return ret; - } - } - inc_refcounts(bs, res, *refcount_table, *nb_clusters, - s->snapshots_offset, s->snapshots_size); - - /* refcount data */ - inc_refcounts(bs, res, *refcount_table, *nb_clusters, - s->refcount_table_offset, - s->refcount_table_size * sizeof(uint64_t)); - - return check_refblocks(bs, res, fix, refcount_table, nb_clusters); -} - /* * Checks consistency of refblocks and accounts for each refblock in * *refcount_table. @@ -1626,6 +1573,55 @@ static int check_refblocks(BlockDriverState *bs, B= drvCheckResult *res, } =20 /* + * Calculates an in-memory refcount table. + */ +static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *re= s, + BdrvCheckMode fix, uint16_t **refcount_ta= ble, + int64_t *nb_clusters) +{ + BDRVQcowState *s =3D bs->opaque; + int64_t i; + QCowSnapshot *sn; + int ret; + + *refcount_table =3D g_try_new0(uint16_t, *nb_clusters); + if (*nb_clusters && *refcount_table =3D=3D NULL) { + res->check_errors++; + return -ENOMEM; + } + + /* header */ + inc_refcounts(bs, res, *refcount_table, *nb_clusters, + 0, s->cluster_size); + + /* current L1 table */ + ret =3D check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, + s->l1_table_offset, s->l1_size, CHECK_FRAG_= INFO); + if (ret < 0) { + return ret; + } + + /* snapshots */ + for (i =3D 0; i < s->nb_snapshots; i++) { + sn =3D s->snapshots + i; + ret =3D check_refcounts_l1(bs, res, *refcount_table, *nb_cluster= s, + sn->l1_table_offset, sn->l1_size, 0); + if (ret < 0) { + return ret; + } + } + inc_refcounts(bs, res, *refcount_table, *nb_clusters, + s->snapshots_offset, s->snapshots_size); + + /* refcount data */ + inc_refcounts(bs, res, *refcount_table, *nb_clusters, + s->refcount_table_offset, + s->refcount_table_size * sizeof(uint64_t)); + + return check_refblocks(bs, res, fix, refcount_table, nb_clusters); +} + +/* * Compares the actual reference count for each cluster in the image aga= inst the * refcount as reported by the refcount structures on-disk. */ --=20 2.1.0