1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #if defined(HAVE_LIBAIO)
9 int aio_queue_t::submit(aio_t &aio, int *retries)
11 // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
14 iocb *piocb = &aio.iocb;
17 r = io_submit(ctx, 1, &piocb);
19 if (r == -EAGAIN && attempts-- > 0) {
32 int aio_queue_t::submit_batch(aio_iter begin, aio_iter end,
33 uint16_t aios_size, void *priv,
36 // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
41 struct iocb *piocb[aios_size];
45 *(piocb+left) = &cur->iocb;
51 int r = io_submit(ctx, left, piocb + done);
53 if (r == -EAGAIN && attempts-- > 0) {
68 int aio_queue_t::get_next_completed(int timeout_ms, aio_t **paio, int max)
73 (timeout_ms % 1000) * 1000 * 1000
78 r = io_getevents(ctx, 1, max, event, &t);
79 } while (r == -EINTR);
81 for (int i=0; i<r; ++i) {
82 paio[i] = (aio_t *)event[i].obj;
83 paio[i]->rval = event[i].res;