From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58883) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REkuA-0006X5-PD for qemu-devel@nongnu.org; Fri, 14 Oct 2011 12:46:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REku8-0001Ed-FK for qemu-devel@nongnu.org; Fri, 14 Oct 2011 12:46:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58834) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REku8-0001ER-4h for qemu-devel@nongnu.org; Fri, 14 Oct 2011 12:46:40 -0400 From: Kevin Wolf Date: Fri, 14 Oct 2011 18:49:08 +0200 Message-Id: <1318610959-17971-14-git-send-email-kwolf@redhat.com> In-Reply-To: <1318610959-17971-1-git-send-email-kwolf@redhat.com> References: <1318610959-17971-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 13/24] block: directly invoke .bdrv_* from emulation functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony@codemonkey.ws Cc: kwolf@redhat.com, qemu-devel@nongnu.org From: Stefan Hajnoczi The emulation functions which supply default BlockDriver .bdrv_*() functions given another implemented .bdrv_*() function should not use public bdrv_*() interfaces. This patch ensures they invoke .bdrv_*() directly to avoid adding an extra layer of coroutine request processing and possibly entering an infinite loop. Signed-off-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- block.c | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-) diff --git a/block.c b/block.c index 09f8aad..7c01f72 100644 --- a/block.c +++ b/block.c @@ -2739,9 +2739,9 @@ static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs, if (is_write) { qemu_iovec_to_buffer(acb->qiov, acb->bounce); - acb->ret = bdrv_write(bs, sector_num, acb->bounce, nb_sectors); + acb->ret = bs->drv->bdrv_write(bs, sector_num, acb->bounce, nb_sectors); } else { - acb->ret = bdrv_read(bs, sector_num, acb->bounce, nb_sectors); + acb->ret = bs->drv->bdrv_read(bs, sector_num, acb->bounce, nb_sectors); } qemu_bh_schedule(acb->bh); @@ -2906,8 +2906,9 @@ static int bdrv_read_em(BlockDriverState *bs, int64_t sector_num, iov.iov_base = (void *)buf; iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; qemu_iovec_init_external(&qiov, &iov, 1); - acb = bdrv_aio_readv(bs, sector_num, &qiov, nb_sectors, - bdrv_rw_em_cb, &async_ret); + + acb = bs->drv->bdrv_aio_readv(bs, sector_num, &qiov, nb_sectors, + bdrv_rw_em_cb, &async_ret); if (acb == NULL) { async_ret = -1; goto fail; @@ -2934,8 +2935,9 @@ static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, iov.iov_base = (void *)buf; iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; qemu_iovec_init_external(&qiov, &iov, 1); - acb = bdrv_aio_writev(bs, sector_num, &qiov, nb_sectors, - bdrv_rw_em_cb, &async_ret); + + acb = bs->drv->bdrv_aio_writev(bs, sector_num, &qiov, nb_sectors, + bdrv_rw_em_cb, &async_ret); if (acb == NULL) { async_ret = -1; goto fail; -- 1.7.6.4