summaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2008-01-18 10:26:58 +0100
committerJens Axboe <jens.axboe@oracle.com>2008-01-18 10:26:58 +0100
commit5e00c2c4b7e2d5c1e535dbe10ee4b687f9f4b72b (patch)
tree4f28f63e9b03039cce03a83998fccba2069b11c0 /engines
parentf51dcafee6557ecae8d4c1c62bb559d563bbcce4 (diff)
downloadfio-5e00c2c4b7e2d5c1e535dbe10ee4b687f9f4b72b.tar.gz
libio: fix bug in commit hook
Also simplifies it. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'engines')
-rw-r--r--engines/libaio.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/engines/libaio.c b/engines/libaio.c
index 29eac20f..eea8f553 100644
--- a/engines/libaio.c
+++ b/engines/libaio.c
@@ -133,36 +133,26 @@ static int fio_libaio_commit(struct thread_data *td)
struct libaio_data *ld = td->io_ops->data;
struct iocb **iocbs;
struct io_u **io_us;
- int ret, iocbs_nr;
+ int ret;
if (!ld->iocbs_nr)
return 0;
- iocbs_nr = ld->iocbs_nr;
io_us = ld->io_us;
iocbs = ld->iocbs;
do {
- ret = io_submit(ld->aio_ctx, iocbs_nr, iocbs);
- if (ret == iocbs_nr) {
- fio_libaio_queued(td, io_us, ret);
- ret = 0;
- break;
- } else if (ret > 0) {
+ ret = io_submit(ld->aio_ctx, ld->iocbs_nr, iocbs);
+ if (ret > 0) {
fio_libaio_queued(td, io_us, ret);
+ ld->iocbs_nr -= ret;
io_us += ret;
iocbs += ret;
- iocbs_nr -= ret;
- continue;
- } else if (ret == -EAGAIN || !ret)
- usleep(100);
- else if (ret == -EINTR)
+ ret = 0;
+ } else if (!ret || ret == -EAGAIN || ret == -EINTR)
continue;
else
break;
- } while (1);
-
- if (!ret)
- ld->iocbs_nr = 0;
+ } while (ld->iocbs_nr);
return ret;
}