From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:41419) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qmf1w-0002DG-GJ for qemu-devel@nongnu.org; Fri, 29 Jul 2011 00:50:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qmf1v-0000Rz-In for qemu-devel@nongnu.org; Fri, 29 Jul 2011 00:50:36 -0400 Received: from mail-iy0-f173.google.com ([209.85.210.173]:46817) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qmf1v-0000NN-Cf for qemu-devel@nongnu.org; Fri, 29 Jul 2011 00:50:35 -0400 Received: by mail-iy0-f173.google.com with SMTP id 39so4186308iyb.4 for ; Thu, 28 Jul 2011 21:50:35 -0700 (PDT) From: Devin Nakamura Date: Fri, 29 Jul 2011 00:49:45 -0400 Message-Id: <1311914994-20482-16-git-send-email-devin122@gmail.com> In-Reply-To: <1311914994-20482-1-git-send-email-devin122@gmail.com> References: <1311914994-20482-1-git-send-email-devin122@gmail.com> Subject: [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Devin Nakamura Signed-off-by: Devin Nakamura --- block/qcow2-refcount.c | 39 +++++++++++++++++++++++++++++---------- 1 files changed, 29 insertions(+), 10 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 14b2f67..75f1f88 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -1075,17 +1075,10 @@ fail: return -EIO; } -/* - * Checks an image for refcount consistency. - * - * Returns 0 if no errors are found, the number of errors in case the image is - * detected as corrupted, and -errno when an internal error occurred. - */ -int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res) -{ +static int inc_refcount_table(BlockDriverState *bs, BdrvCheckResult *res, uint16_t **table) { BDRVQcowState *s = bs->opaque; int64_t size; - int nb_clusters, refcount1, refcount2, i; + int nb_clusters, i; QCowSnapshot *sn; uint16_t *refcount_table; int ret; @@ -1151,6 +1144,33 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res) } } } + *table = refcount_table; + ret = 0; + +fail: + return ret; +} + +/* + * Checks an image for refcount consistency. + * + * Returns 0 if no errors are found, the number of errors in case the image is + * detected as corrupted, and -errno when an internal error occurred. + */ +int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res) +{ + BDRVQcowState *s = bs->opaque; + int64_t size; + int nb_clusters, refcount1, refcount2, i; + uint16_t *refcount_table; + int ret; + + size = bdrv_getlength(bs->file); + nb_clusters = size_to_clusters(s, size); + ret = inc_refcount_table(bs, res, &refcount_table); + if (ret) { + goto fail; + } /* compare ref counts */ for(i = 0; i < nb_clusters; i++) { @@ -1182,4 +1202,3 @@ fail: return ret; } - -- 1.7.6.rc1