From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lw1kA-00030o-AV for qemu-devel@nongnu.org; Mon, 20 Apr 2009 18:13:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lw1k4-0002yH-VG for qemu-devel@nongnu.org; Mon, 20 Apr 2009 18:13:37 -0400 Received: from [199.232.76.173] (port=58108 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lw1k4-0002y7-KF for qemu-devel@nongnu.org; Mon, 20 Apr 2009 18:13:32 -0400 Received: from e36.co.us.ibm.com ([32.97.110.154]:51899) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Lw1k4-0006Pf-BA for qemu-devel@nongnu.org; Mon, 20 Apr 2009 18:13:32 -0400 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by e36.co.us.ibm.com (8.13.1/8.13.1) with ESMTP id n3KMC0Vs010802 for ; Mon, 20 Apr 2009 16:12:00 -0600 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n3KMDVUt096400 for ; Mon, 20 Apr 2009 16:13:31 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n3KMDRKk004989 for ; Mon, 20 Apr 2009 16:13:27 -0600 From: Ryan Harper Date: Mon, 20 Apr 2009 17:13:19 -0500 Message-Id: <1240265600-9469-3-git-send-email-ryanh@us.ibm.com> In-Reply-To: <1240265600-9469-1-git-send-email-ryanh@us.ibm.com> References: <1240265600-9469-1-git-send-email-ryanh@us.ibm.com> Subject: [Qemu-devel] [STABLE][PATCH 2/3] Convert vectored aio emulation to use a dedicated pool List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori , Ryan Harper , Avi Kivity Rebased on qemu-stable. This allows us to remove a hack in the vectored aio cancellation code. Signed-off-by: Avi Kivity diff --git a/block.c b/block.c index 1aa3de5..465a09f 100644 --- a/block.c +++ b/block.c @@ -41,6 +41,8 @@ #define SECTOR_BITS 9 #define SECTOR_SIZE (1 << SECTOR_BITS) +static AIOPool vectored_aio_pool; + typedef struct BlockDriverAIOCBSync { BlockDriverAIOCB common; QEMUBH *bh; @@ -1333,6 +1335,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; @@ -1355,7 +1364,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; @@ -1444,11 +1454,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); } @@ -1550,6 +1555,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