aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorFam Zheng <famz@redhat.com>2014-09-11 13:41:22 +0800
committerStefan Hajnoczi <stefanha@redhat.com>2014-09-22 11:39:13 +0100
commit7940e5056bfdb5d2861774e294d5459952cd0aee (patch)
tree9bc42d3d09e067306f1eeb83e48835701d7b940f /block
parent997dd8df3e95b2fdbd1f30b3deefaad4e9efd14a (diff)
downloadvirtio-serial-7940e5056bfdb5d2861774e294d5459952cd0aee.tar.gz
quorum: Convert quorum_aiocb_info.cancel to .cancel_async
Before, we cancel all the child requests with bdrv_aio_cancel, then free the acb.. Now we just kick off asynchronous cancellation of child requests and return, we know quorum_aio_cb will be called later, so in the end quorum_aio_finalize will take care of calling the caller's cb. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/quorum.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/block/quorum.c b/block/quorum.c
index 41c4249547d..f343c04c532 100644
--- a/block/quorum.c
+++ b/block/quorum.c
@@ -139,17 +139,14 @@ static void quorum_aio_cancel(BlockDriverAIOCB *blockacb)
/* cancel all callbacks */
for (i = 0; i < s->num_children; i++) {
if (acb->qcrs[i].aiocb) {
- bdrv_aio_cancel(acb->qcrs[i].aiocb);
+ bdrv_aio_cancel_async(acb->qcrs[i].aiocb);
}
}
-
- g_free(acb->qcrs);
- qemu_aio_release(acb);
}
static AIOCBInfo quorum_aiocb_info = {
.aiocb_size = sizeof(QuorumAIOCB),
- .cancel = quorum_aio_cancel,
+ .cancel_async = quorum_aio_cancel,
};
static void quorum_aio_finalize(QuorumAIOCB *acb)