From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7kCX-00043k-45 for qemu-devel@nongnu.org; Thu, 17 Jul 2014 07:50:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X7kCR-0003wb-3n for qemu-devel@nongnu.org; Thu, 17 Jul 2014 07:50:17 -0400 Received: from mail-pd0-x22f.google.com ([2607:f8b0:400e:c02::22f]:36012) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7kCQ-0003wS-Sw for qemu-devel@nongnu.org; Thu, 17 Jul 2014 07:50:11 -0400 Received: by mail-pd0-f175.google.com with SMTP id r10so1556760pdi.34 for ; Thu, 17 Jul 2014 04:50:09 -0700 (PDT) From: Liu Yuan Date: Thu, 17 Jul 2014 19:50:08 +0800 Message-Id: <1405597808-15975-1-git-send-email-namei.unix@gmail.com> Subject: [Qemu-devel] [PATCH] block/quorum: implement .bdrv_co_get_block_status List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Benoit Canet , Stefan Hajnoczi - allow drive-mirror to create sprase mirror on images like qcow2 - allow qemu-img map to work as expected on quorum driver Cc: Benoit Canet Cc: Kevin Wolf Cc: Stefan Hajnoczi Signed-off-by: Liu Yuan --- block/quorum.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/block/quorum.c b/block/quorum.c index ebf5c71..f0d0a98 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -780,6 +780,21 @@ static coroutine_fn int quorum_co_flush(BlockDriverState *bs) return result; } +static int64_t coroutine_fn quorum_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, + int *pnum) +{ + BDRVQuorumState *s = bs->opaque; + BlockDriverState *child_bs = s->bs[0]; + + if (child_bs->drv->bdrv_co_get_block_status) + return child_bs->drv->bdrv_co_get_block_status(child_bs, sector_num, + nb_sectors, pnum); + + return bdrv_get_block_status(child_bs, sector_num, nb_sectors, pnum); +} + static bool quorum_recurse_is_first_non_filter(BlockDriverState *bs, BlockDriverState *candidate) { @@ -1038,6 +1053,7 @@ static BlockDriver bdrv_quorum = { .bdrv_close = quorum_close, .bdrv_co_flush_to_disk = quorum_co_flush, + .bdrv_co_get_block_status = quorum_co_get_block_status, .bdrv_getlength = quorum_getlength, -- 1.9.1