From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53273) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4SW5-0005aY-S3 for qemu-devel@nongnu.org; Wed, 31 Jul 2013 05:16:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V4SVz-00088n-Fg for qemu-devel@nongnu.org; Wed, 31 Jul 2013 05:16:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49244) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4SVz-00088h-8S for qemu-devel@nongnu.org; Wed, 31 Jul 2013 05:16:15 -0400 Date: Wed, 31 Jul 2013 11:16:09 +0200 From: Kevin Wolf Message-ID: <20130731091609.GF3090@dhcp-200-207.str.redhat.com> References: <1374762197-7261-1-git-send-email-pbonzini@redhat.com> <1374762197-7261-16-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1374762197-7261-16-git-send-email-pbonzini@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 15/19] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: pl@kamp.de, qemu-devel@nongnu.org, stefanha@redhat.com Am 25.07.2013 um 16:23 hat Paolo Bonzini geschrieben: > Alternatively, this could use a "discard zeroes data" flag returned > by bdrv_get_info. > > Reviewed-by: Eric Blake > Signed-off-by: Paolo Bonzini > --- > block.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/block.c b/block.c > index 7cfbf71..fc1da56 100644 > --- a/block.c > +++ b/block.c > @@ -2991,6 +2991,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, > int nb_sectors, int *pnum) > { > int64_t n; > + int64_t ret; > > if (sector_num >= bs->total_sectors) { > *pnum = 0; > @@ -3007,7 +3008,12 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, > return BDRV_BLOCK_DATA; > } > > - return bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); > + ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); I think here you should check for ret < 0 before modifying bits. > + if (!(ret & BDRV_BLOCK_DATA) && bdrv_has_zero_init(bs)) { > + ret |= BDRV_BLOCK_ZERO; > + } > + > + return ret; > } Kevin