From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38607) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4Bel-00019c-AG for qemu-devel@nongnu.org; Tue, 30 Jul 2013 11:16:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V4Bef-0003Eu-B8 for qemu-devel@nongnu.org; Tue, 30 Jul 2013 11:16:11 -0400 Received: from mx1.redhat.com ([209.132.183.28]:3147) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4Bef-0003Ei-2a for qemu-devel@nongnu.org; Tue, 30 Jul 2013 11:16:05 -0400 Message-ID: <51F7D89A.3060502@redhat.com> Date: Tue, 30 Jul 2013 17:15:38 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1374762197-7261-1-git-send-email-pbonzini@redhat.com> <1374762197-7261-13-git-send-email-pbonzini@redhat.com> <20130730144048.GE2475@dhcp-200-207.str.redhat.com> In-Reply-To: <20130730144048.GE2475@dhcp-200-207.str.redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 12/19] block: return get_block_status data and flags for formats List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: pl@kamp.de, qemu-devel@nongnu.org, stefanha@redhat.com Il 30/07/2013 16:40, Kevin Wolf ha scritto: > Am 25.07.2013 um 16:23 hat Paolo Bonzini geschrieben: >> Reviewed-by: Eric Blake >> Signed-off-by: Paolo Bonzini >> --- >> block/cow.c | 8 +++++++- >> block/qcow.c | 9 ++++++++- >> block/qcow2.c | 16 ++++++++++++++-- >> block/qed.c | 35 ++++++++++++++++++++++++++++------- >> block/sheepdog.c | 2 +- >> block/vdi.c | 13 ++++++++++++- >> block/vmdk.c | 19 ++++++++++++++++++- >> block/vvfat.c | 11 ++++++----- >> 8 files changed, 94 insertions(+), 19 deletions(-) >> >> diff --git a/block/cow.c b/block/cow.c >> index e738b96..1e90413 100644 >> --- a/block/cow.c >> +++ b/block/cow.c >> @@ -194,7 +194,13 @@ static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs, >> static int64_t coroutine_fn cow_co_get_block_status(BlockDriverState *bs, >> int64_t sector_num, int nb_sectors, int *num_same) >> { >> - return cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); >> + BDRVCowState *s = bs->opaque; >> + int ret = cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); >> + int64_t offset = s->cow_sectors_offset + (sector_num << BDRV_SECTOR_BITS); >> + if (ret < 0) { >> + return ret; >> + } >> + return (ret ? BDRV_BLOCK_DATA : 0) | offset | BDRV_BLOCK_OFFSET_VALID; >> } >> >> static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, >> diff --git a/block/qcow.c b/block/qcow.c >> index acd1aeb..1a65822 100644 >> --- a/block/qcow.c >> +++ b/block/qcow.c >> @@ -410,7 +410,14 @@ static int64_t coroutine_fn qcow_co_get_block_status(BlockDriverState *bs, >> if (n > nb_sectors) >> n = nb_sectors; >> *pnum = n; >> - return (cluster_offset != 0); >> + if (!cluster_offset) { >> + return 0; > > If you take your comment in patch 11 serious, you should return > bs->backing_hd ? 0 : BDRV_BLOCK_ZERO instead. (I think it would be > useful behaviour, too, because knowing that a sector is zero enables > optimisations in several places.) > > Of course, this is something that could be done in the block.c > implementation of bdrv_co_get_block_status() instead of each single > driver. And it is, in patch 15 ("block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO"). :) Should I reorder the patches? Paolo