From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LjCbE-0006Ar-97 for qemu-devel@nongnu.org; Mon, 16 Mar 2009 09:11:24 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LjCbA-00069H-30 for qemu-devel@nongnu.org; Mon, 16 Mar 2009 09:11:23 -0400 Received: from [199.232.76.173] (port=41548 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LjCb9-00068f-95 for qemu-devel@nongnu.org; Mon, 16 Mar 2009 09:11:19 -0400 Received: from mx2.redhat.com ([66.187.237.31]:39031) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LjCb8-00023t-MF for qemu-devel@nongnu.org; Mon, 16 Mar 2009 09:11:19 -0400 From: Avi Kivity Date: Mon, 16 Mar 2009 15:11:08 +0200 Message-Id: <1237209071-26942-3-git-send-email-avi@redhat.com> In-Reply-To: <1237209071-26942-1-git-send-email-avi@redhat.com> References: <1237209071-26942-1-git-send-email-avi@redhat.com> Subject: [Qemu-devel] [PATCH 2/5] Convert vectored aio emulation to use a dedicated pool Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: qemu-devel@nongnu.org This allows us to remove a hack in the vectored aio cancellation code. Signed-off-by: Avi Kivity --- block.c | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-) diff --git a/block.c b/block.c index ad16ee4..fe83585 100644 --- a/block.c +++ b/block.c @@ -47,6 +47,8 @@ #define SECTOR_BITS 9 #define SECTOR_SIZE (1 << SECTOR_BITS) +static AIOPool vectored_aio_pool; + typedef struct BlockDriverAIOCBSync { BlockDriverAIOCB common; QEMUBH *bh; @@ -1261,6 +1263,13 @@ typedef struct VectorTranslationState { BlockDriverAIOCB *this_aiocb; } VectorTranslationState; +static void bdrv_aio_cancel_vector(BlockDriverAIOCB *acb) +{ + VectorTranslationState *s = acb->opaque; + + bdrv_aio_cancel(s->aiocb); +} + static void bdrv_aio_rw_vector_cb(void *opaque, int ret) { VectorTranslationState *s = opaque; @@ -1283,7 +1292,8 @@ static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs, { VectorTranslationState *s = qemu_mallocz(sizeof(*s)); - BlockDriverAIOCB *aiocb = qemu_aio_get(bs, cb, opaque); + BlockDriverAIOCB *aiocb = qemu_aio_get_pool(&vectored_aio_pool, bs, + cb, opaque); s->this_aiocb = aiocb; s->iov = iov; @@ -1372,11 +1382,6 @@ BlockDriverAIOCB *bdrv_aio_write(BlockDriverState *bs, int64_t sector_num, void bdrv_aio_cancel(BlockDriverAIOCB *acb) { - if (acb->cb == bdrv_aio_rw_vector_cb) { - VectorTranslationState *s = acb->opaque; - acb = s->aiocb; - } - acb->pool->cancel(acb); } @@ -1478,6 +1483,9 @@ static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, void bdrv_init(void) { + aio_pool_init(&vectored_aio_pool, sizeof(BlockDriverAIOCB), + bdrv_aio_cancel_vector); + bdrv_register(&bdrv_raw); bdrv_register(&bdrv_host_device); #ifndef _WIN32 -- 1.6.1.1