From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NUbOX-0007Vf-KS for qemu-devel@nongnu.org; Tue, 12 Jan 2010 02:42:29 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NUbOR-0007Ti-So for qemu-devel@nongnu.org; Tue, 12 Jan 2010 02:42:27 -0500 Received: from [199.232.76.173] (port=50245 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NUbOP-0007TR-T6 for qemu-devel@nongnu.org; Tue, 12 Jan 2010 02:42:22 -0500 Received: from mtagate7.de.ibm.com ([195.212.17.167]:52009) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NUbOP-0005kK-8o for qemu-devel@nongnu.org; Tue, 12 Jan 2010 02:42:21 -0500 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate7.de.ibm.com (8.13.1/8.13.1) with ESMTP id o0C7gGrs019183 for ; Tue, 12 Jan 2010 07:42:16 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o0C7g9eQ1265846 for ; Tue, 12 Jan 2010 08:42:16 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o0C7g9PK016619 for ; Tue, 12 Jan 2010 08:42:09 +0100 From: Liran Schour Date: Tue, 12 Jan 2010 10:27:12 +0200 Message-Id: <12632848351489-git-send-email-lirans@il.ibm.com> In-Reply-To: <12632848343008-git-send-email-lirans@il.ibm.com> References: <1263284833297-git-send-email-lirans@il.ibm.com> <12632848342235-git-send-email-lirans@il.ibm.com> <12632848343008-git-send-email-lirans@il.ibm.com> Subject: [Qemu-devel] [PATCH 3/4] Count dirty blocks and expose an API to get dirty count List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Liran Schour This will manage dirty counter for each device and will allow to get the dirty counter from above. Signed-off-by: Liran Schour --- block.c | 20 ++++++++++++++++---- block.h | 1 + block_int.h | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 853f025..ecfcba4 100644 --- a/block.c +++ b/block.c @@ -652,9 +652,15 @@ static void set_dirty_bitmap(BlockDriverState *bs, int64_t sector_num, bit = start % (sizeof(unsigned long) * 8); val = bs->dirty_bitmap[idx]; if (dirty) { - val |= 1 << bit; + if (!(val & (1 << bit))) { + bs->dirty_count++; + val |= 1 << bit; + } } else { - val &= ~(1 << bit); + if (val & (1 << bit)) { + bs->dirty_count--; + val &= ~(1 << bit); + } } bs->dirty_bitmap[idx] = val; } @@ -1972,14 +1978,15 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size) void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable) { int64_t bitmap_size; - + + bs->dirty_count = 0; if (enable) { if (!bs->dirty_bitmap) { bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS) + BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1; bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * 8; - bs->dirty_bitmap = qemu_mallocz(bitmap_size); + bs->dirty_bitmap = qemu_mallocz(bitmap_size); } } else { if (bs->dirty_bitmap) { @@ -2007,3 +2014,8 @@ void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, { set_dirty_bitmap(bs, cur_sector, nr_sectors, 0); } + +int64_t bdrv_get_dirty_count(BlockDriverState *bs) +{ + return bs->dirty_count; +} diff --git a/block.h b/block.h index 4a8b628..bf489d0 100644 --- a/block.h +++ b/block.h @@ -198,4 +198,5 @@ void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable); int bdrv_get_dirty(BlockDriverState *bs, int64_t sector); void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors); +int64_t bdrv_get_dirty_count(BlockDriverState *bs); #endif diff --git a/block_int.h b/block_int.h index 9a3b2e0..8d5d9bc 100644 --- a/block_int.h +++ b/block_int.h @@ -172,6 +172,7 @@ struct BlockDriverState { int type; char device_name[32]; unsigned long *dirty_bitmap; + int64_t dirty_count; BlockDriverState *next; void *private; }; -- 1.5.2.4