+ wait_start = 0;
+ continue;
+ } else if (ret == -EAGAIN) {
+ /*
+ * If we get EAGAIN, we should break out without
+ * error and let the upper layer reap some
+ * events for us. If we have no queued IO, we
+ * must loop here. If we loop for more than 30s,
+ * just error out, something must be buggy in the
+ * IO path.
+ */
+ if (ld->queued) {
+ ret = 0;
+ break;
+ }
+ if (!wait_start) {
+ fio_gettime(&ts, NULL);
+ wait_start = 1;
+ } else if (mtime_since_now(&ts) > 30000) {
+ log_err("fio: aio appears to be stalled, giving up\n");
+ break;
+ }
+ usleep(1);