int max_iodepth;
io_context_t ctx;
- aio_queue_t(unsigned max_iodepth = 8)
+ aio_queue_t(unsigned max_iodepth)
: max_iodepth(max_iodepth),
ctx(0) {
}
}
}
- int submit(aio_t &aio) {
+ int submit(aio_t &aio, int *retries) {
int attempts = 10;
iocb *piocb = &aio.iocb;
do {
if (r < 0) {
if (r == -EAGAIN && attempts-- > 0) {
usleep(500);
+ (*retries)++;
continue;
}
return r;
}
+ assert(r == 1);
} while (false);
return 0;
}
void NewStore::_txc_aio_submit(TransContext *txc)
{
int num = txc->aios.size();
- dout(10) << __func__ << " submitting " << num << " aios" << dendl;
+ dout(10) << __func__ << " txc " << txc << " submitting " << num << dendl;
+ assert(num > 0);
txc->num_aio.set(num);
for (list<FS::aio_t>::iterator p = txc->aios.begin();
p != txc->aios.end();
<< " len " << q->iov_len << dendl;
dout(30) << " fd " << aio.fd << " offset " << lseek64(aio.fd, 0, SEEK_CUR)
<< dendl;
- int r = aio_queue.submit(*p);
+ int retries = 0;
+ int r = aio_queue.submit(*p, &retries);
+ if (retries)
+ derr << __func__ << " retries " << retries << dendl;
if (r) {
derr << " aio submit got " << cpp_strerror(r) << dendl;
assert(r == 0);