[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 24/29] qed: Remove recursion in qed_aio_next_io()
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 24/29] qed: Remove recursion in qed_aio_next_io() |
Date: |
Fri, 26 May 2017 22:22:05 +0200 |
Instead of calling itself recursively as the last thing, just convert
qed_aio_next_io() into a loop.
This patch is best reviewed with 'git show -w' because most of it is
just whitespace changes.
Signed-off-by: Kevin Wolf <address@hidden>
---
block/qed.c | 63 +++++++++++++++++++++++++++++++------------------------------
1 file changed, 32 insertions(+), 31 deletions(-)
diff --git a/block/qed.c b/block/qed.c
index 078591b..6a83df2 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -1284,45 +1284,46 @@ static void qed_aio_next_io(QEDAIOCB *acb)
size_t len;
int ret;
- trace_qed_aio_next_io(s, acb, 0, acb->cur_pos + acb->cur_qiov.size);
+ while (1) {
+ trace_qed_aio_next_io(s, acb, 0, acb->cur_pos + acb->cur_qiov.size);
- if (acb->backing_qiov) {
- qemu_iovec_destroy(acb->backing_qiov);
- g_free(acb->backing_qiov);
- acb->backing_qiov = NULL;
- }
+ if (acb->backing_qiov) {
+ qemu_iovec_destroy(acb->backing_qiov);
+ g_free(acb->backing_qiov);
+ acb->backing_qiov = NULL;
+ }
- acb->qiov_offset += acb->cur_qiov.size;
- acb->cur_pos += acb->cur_qiov.size;
- qemu_iovec_reset(&acb->cur_qiov);
+ acb->qiov_offset += acb->cur_qiov.size;
+ acb->cur_pos += acb->cur_qiov.size;
+ qemu_iovec_reset(&acb->cur_qiov);
- /* Complete request */
- if (acb->cur_pos >= acb->end_pos) {
- qed_aio_complete(acb, 0);
- return;
- }
+ /* Complete request */
+ if (acb->cur_pos >= acb->end_pos) {
+ qed_aio_complete(acb, 0);
+ return;
+ }
- /* Find next cluster and start I/O */
- len = acb->end_pos - acb->cur_pos;
- ret = qed_find_cluster(s, &acb->request, acb->cur_pos, &len, &offset);
- if (ret < 0) {
- qed_aio_complete(acb, ret);
- return;
- }
+ /* Find next cluster and start I/O */
+ len = acb->end_pos - acb->cur_pos;
+ ret = qed_find_cluster(s, &acb->request, acb->cur_pos, &len, &offset);
+ if (ret < 0) {
+ qed_aio_complete(acb, ret);
+ return;
+ }
- if (acb->flags & QED_AIOCB_WRITE) {
- ret = qed_aio_write_data(acb, ret, offset, len);
- } else {
- ret = qed_aio_read_data(acb, ret, offset, len);
- }
+ if (acb->flags & QED_AIOCB_WRITE) {
+ ret = qed_aio_write_data(acb, ret, offset, len);
+ } else {
+ ret = qed_aio_read_data(acb, ret, offset, len);
+ }
- if (ret < 0) {
- if (ret != -EINPROGRESS) {
- qed_aio_complete(acb, ret);
+ if (ret < 0) {
+ if (ret != -EINPROGRESS) {
+ qed_aio_complete(acb, ret);
+ }
+ return;
}
- return;
}
- qed_aio_next_io(acb);
}
static BlockAIOCB *qed_aio_setup(BlockDriverState *bs,
--
1.8.3.1
- [Qemu-devel] [PATCH 19/29] qed: Add return value to qed_aio_write_main(), (continued)
- [Qemu-devel] [PATCH 19/29] qed: Add return value to qed_aio_write_main(), Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 20/29] qed: Add return value to qed_aio_write_cow(), Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 21/29] qed: Add return value to qed_aio_write_inplace/alloc(), Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 23/29] qed: Remove ret argument from qed_aio_next_io(), Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 22/29] qed: Add return value to qed_aio_read/write_data(), Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 24/29] qed: Remove recursion in qed_aio_next_io(),
Kevin Wolf <=
- [Qemu-devel] [PATCH 26/29] qed: Use CoQueue for serialising allocations, Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 25/29] qed: Implement .bdrv_co_readv/writev, Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 27/29] qed: Simplify request handling, Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 28/29] qed: Use a coroutine for need_check_timer, Kevin Wolf, 2017/05/26
- [Qemu-devel] [PATCH 29/29] block: Remove bdrv_aio_readv/writev_flush(), Kevin Wolf, 2017/05/26