From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42231) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xlafo-0004vI-Nl for qemu-devel@nongnu.org; Tue, 04 Nov 2014 04:45:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xlafj-0001Ln-Kn for qemu-devel@nongnu.org; Tue, 04 Nov 2014 04:45:12 -0500 Received: from mx1.redhat.com ([209.132.183.28]:48526) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xlafj-0001Kd-Dz for qemu-devel@nongnu.org; Tue, 04 Nov 2014 04:45:07 -0500 Message-ID: <5458A016.6050908@redhat.com> Date: Tue, 04 Nov 2014 10:44:54 +0100 From: Max Reitz MIME-Version: 1.0 References: <1414639364-4499-1-git-send-email-famz@redhat.com> <1414639364-4499-4-git-send-email-famz@redhat.com> In-Reply-To: <1414639364-4499-4-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v6 03/10] block: Introduce bdrv_dirty_bitmap_granularity() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , Benoit Canet , Vladimir Sementsov-Ogievskij , Markus Armbruster , Luiz Capitulino , John Snow , Stefan Hajnoczi , Jd , Paolo Bonzini On 2014-10-30 at 04:22, Fam Zheng wrote: > This returns the granularity (in sectors) of dirty bitmap. Actually, it does not. > Signed-off-by: Fam Zheng > Reviewed-by: Benoit Canet > --- > block.c | 6 ++++++ > include/block/block.h | 2 ++ > 2 files changed, 8 insertions(+) > > diff --git a/block.c b/block.c > index dafde4b..1b12541 100644 > --- a/block.c > +++ b/block.c > @@ -5356,6 +5356,12 @@ int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector > } > } > > +int bdrv_dirty_bitmap_granularity(BlockDriverState *bs, > + BdrvDirtyBitmap *bitmap) > +{ > + return hbitmap_granularity(bitmap->bitmap); > +} > + hbitmap_granularity() returns bitmap->bitmap->granularity. Unfortunately, that value is ffs(granularity >> BDRV_SECTOR_BITS) - 1, (= ffs(granularity) - 1 - BDRV_SECTOR_BITS) where "granularity" is the original granularity from when the dirty bitmap was created. Therefore, this should be 1 << hbitmap_granularity(bitmap->bitmap) to be the granularity in sectors. See bdrv_query_dirty_bitmaps() (written by you :-)). And frankly, I'd prefer this not to return the granularity in sectors but in bytes, because that's the unit the granularity is specified in when the dirty bitmap is created; also, as far as my understanding goes, we want to get away from sectors, so I wouldn't introduce a new function using that unit if there's no real need for it. Max > void bdrv_dirty_iter_init(BlockDriverState *bs, > BdrvDirtyBitmap *bitmap, HBitmapIter *hbi) > { > diff --git a/include/block/block.h b/include/block/block.h > index b0ef82c..87fa48e 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -428,6 +428,8 @@ BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, > void bdrv_dirty_bitmap_make_anon(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); > void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap); > BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs); > +int bdrv_dirty_bitmap_granularity(BlockDriverState *bs, > + BdrvDirtyBitmap *bitmap); > int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector); > void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors); > void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors);