Jan and Alex have expressed that aio_poll(ctx, blocking=true) should block even
when there are no file descriptors registered.  This can be handy since other
threads may still kick the AioContext using aio_notify(ctx).

A concrete example is a thread that has only a timer in its AioContext.
aio_poll(ctx, true) should block until the timer expires or another thread
invokes aio_notify(ctx).

Alex and Paolo were concerned about bdrv_drain_all() which has the following
comment:

  while (busy) {
      /* FIXME: We do not have timer support here, so this is effectively
       * a busy wait.
       */
      QTAILQ_FOREACH(bs, &bdrv_states, list) {
          if (bdrv_start_throttled_reqs(bs)) {
              busy = true;
          }
      }

      busy = bdrv_requests_pending_all();
      busy |= aio_poll(qemu_get_aio_context(), busy);
  }

Patch 1 drops this outdated comment.  The new I/O throttling code already
eliminated the busy wait.

Patch 2 drops the special case which returns immediately from aio_poll(ctx,
true) when no file descriptors are registered.

Note that aio_notify(ctx) still causes aio_poll(ctx, true) to return false.  I
don't see a need to change it so aio_poll(ctx, true) always returns true.

Stefan Hajnoczi (2):
  block: clean up bdrv_drain_all() throttling comments
  aio: make aio_poll(ctx, true) block with no fds

 aio-posix.c      | 5 -----
 aio-win32.c      | 5 -----
 block.c          | 7 +------
 tests/test-aio.c | 1 -
 4 files changed, 1 insertion(+), 17 deletions(-)

-- 
1.8.3.1


Reply via email to