From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Benoit Canet <benoit@irqsave.net>,
Peter Lieven <pl@kamp.de>, Stefan Hajnoczi <stefanha@redhat.com>,
Liu Yuan <namei.unix@gmail.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [PATCH v6 07/22] linux-aio: Convert laio_aiocb_info.cancel to .cancel_async
Date: Thu, 11 Sep 2014 13:41:13 +0800 [thread overview]
Message-ID: <1410414088-4419-8-git-send-email-famz@redhat.com> (raw)
In-Reply-To: <1410414088-4419-1-git-send-email-famz@redhat.com>
Just call io_cancel (2), if it fails, it means the request is not
canceled, so the event loop will eventually call
qemu_laio_process_completion.
In qemu_laio_process_completion, change to call the cb unconditionally.
It is required by bdrv_aio_cancel_async.
Signed-off-by: Fam Zheng <famz@redhat.com>
---
block/linux-aio.c | 30 ++++++++----------------------
1 file changed, 8 insertions(+), 22 deletions(-)
diff --git a/block/linux-aio.c b/block/linux-aio.c
index 9aca758..b67f56c 100644
--- a/block/linux-aio.c
+++ b/block/linux-aio.c
@@ -85,9 +85,8 @@ static void qemu_laio_process_completion(struct qemu_laio_state *s,
ret = -EINVAL;
}
}
-
- laiocb->common.cb(laiocb->common.opaque, ret);
}
+ laiocb->common.cb(laiocb->common.opaque, ret);
qemu_aio_release(laiocb);
}
@@ -153,35 +152,22 @@ static void laio_cancel(BlockDriverAIOCB *blockacb)
struct io_event event;
int ret;
- if (laiocb->ret != -EINPROGRESS)
+ if (laiocb->ret != -EINPROGRESS) {
return;
-
- /*
- * Note that as of Linux 2.6.31 neither the block device code nor any
- * filesystem implements cancellation of AIO request.
- * Thus the polling loop below is the normal code path.
- */
+ }
ret = io_cancel(laiocb->ctx->ctx, &laiocb->iocb, &event);
- if (ret == 0) {
- laiocb->ret = -ECANCELED;
+ laiocb->ret = -ECANCELED;
+ if (ret != 0) {
+ /* iocb is not cancelled, cb will be called by the event loop later */
return;
}
- /*
- * We have to wait for the iocb to finish.
- *
- * The only way to get the iocb status update is by polling the io context.
- * We might be able to do this slightly more optimal by removing the
- * O_NONBLOCK flag.
- */
- while (laiocb->ret == -EINPROGRESS) {
- qemu_laio_completion_cb(&laiocb->ctx->e);
- }
+ laiocb->common.cb(laiocb->common.opaque, laiocb->ret);
}
static const AIOCBInfo laio_aiocb_info = {
.aiocb_size = sizeof(struct qemu_laiocb),
- .cancel = laio_cancel,
+ .cancel_async = laio_cancel,
};
static void ioq_init(LaioQueue *io_q)
--
1.9.3
next prev parent reply other threads:[~2014-09-11 5:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-11 5:41 [Qemu-devel] [PATCH v6 00/22] block: Asynchronous request cancellation Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 01/22] ide/ahci: Check for -ECANCELED in aio callbacks Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 02/22] block: Add refcnt in BlockDriverAIOCB Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 03/22] block: Add bdrv_aio_cancel_async Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 04/22] block: Drop bdrv_em_co_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 05/22] block: Drop bdrv_em_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 06/22] thread-pool: Convert thread_pool_aiocb_info.cancel to cancel_async Fam Zheng
2014-09-11 5:41 ` Fam Zheng [this message]
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 08/22] dma: Convert dma_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 09/22] iscsi: Convert iscsi_aiocb_info.cancel " Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 10/22] archipelago: Drop archipelago_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 11/22] blkdebug: Drop blkdebug_aiocb_info.cancel Fam Zheng
2014-09-15 16:41 ` Stefan Hajnoczi
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 12/22] blkverify: Drop blkverify_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 13/22] curl: Drop curl_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 14/22] qed: Drop qed_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 15/22] quorum: fix quorum_aio_cancel() Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 16/22] quorum: Convert quorum_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 17/22] rbd: Drop rbd_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 18/22] sheepdog: Convert sd_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 19/22] win32-aio: Drop win32_aiocb_info.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 20/22] ide: Convert trim_aiocb_info.cancel to .cancel_async Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 21/22] block: Drop AIOCBInfo.cancel Fam Zheng
2014-09-11 5:41 ` [Qemu-devel] [PATCH v6 22/22] block: Rename qemu_aio_release -> qemu_aio_unref Fam Zheng
2014-09-11 7:45 ` [Qemu-devel] [PATCH v6 00/22] block: Asynchronous request cancellation Paolo Bonzini
2014-09-15 16:44 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1410414088-4419-8-git-send-email-famz@redhat.com \
--to=famz@redhat.com \
--cc=benoit@irqsave.net \
--cc=kwolf@redhat.com \
--cc=namei.unix@gmail.com \
--cc=pbonzini@redhat.com \
--cc=pl@kamp.de \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).