From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35747) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKQzH-0001HZ-Pt for qemu-devel@nongnu.org; Thu, 21 Aug 2014 07:57:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XKQzA-0006CE-QK for qemu-devel@nongnu.org; Thu, 21 Aug 2014 07:57:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:13424) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKQzA-0006Bs-JD for qemu-devel@nongnu.org; Thu, 21 Aug 2014 07:56:56 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7LButva022578 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 21 Aug 2014 07:56:56 -0400 From: Fam Zheng Date: Thu, 21 Aug 2014 19:56:53 +0800 Message-Id: <1408622216-9578-7-git-send-email-famz@redhat.com> In-Reply-To: <1408622216-9578-1-git-send-email-famz@redhat.com> References: <1408622216-9578-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [RFC PATCH 6/9] blkdebug: Implement .cancel_async List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Paolo Bonzini , Stefan Hajnoczi Very similar to .cancel, except that cb is called before releasing the aio. Signed-off-by: Fam Zheng --- block/blkdebug.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index 1586ed9..d269956 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -48,13 +48,6 @@ typedef struct BlkdebugSuspendedReq { QLIST_ENTRY(BlkdebugSuspendedReq) next; } BlkdebugSuspendedReq; -static void blkdebug_aio_cancel(BlockDriverAIOCB *blockacb); - -static const AIOCBInfo blkdebug_aiocb_info = { - .aiocb_size = sizeof(BlkdebugAIOCB), - .cancel = blkdebug_aio_cancel, -}; - enum { ACTION_INJECT_ERROR, ACTION_SET_STATE, @@ -446,12 +439,25 @@ static void error_callback_bh(void *opaque) qemu_aio_release(acb); } +static void blkdebug_aio_cancel_async(BlockDriverAIOCB *blockacb) +{ + BlkdebugAIOCB *acb = container_of(blockacb, BlkdebugAIOCB, common); + blockacb->cb(blockacb->opaque, -ECANCELED); + qemu_aio_release(acb); +} + static void blkdebug_aio_cancel(BlockDriverAIOCB *blockacb) { BlkdebugAIOCB *acb = container_of(blockacb, BlkdebugAIOCB, common); qemu_aio_release(acb); } +static const AIOCBInfo blkdebug_aiocb_info = { + .aiocb_size = sizeof(BlkdebugAIOCB), + .cancel = blkdebug_aio_cancel, + .cancel_async = blkdebug_aio_cancel_async, +}; + static BlockDriverAIOCB *inject_error(BlockDriverState *bs, BlockDriverCompletionFunc *cb, void *opaque, BlkdebugRule *rule) { -- 2.0.3