diff options
author | Stefan Hajnoczi | 2020-06-17 15:22:01 +0200 |
---|---|---|
committer | Stefan Hajnoczi | 2020-06-23 16:46:08 +0200 |
commit | 7838c67f22a81fcf669785cd6c0876438422071a (patch) | |
tree | 55d08313439c1728cd0883cf2c924213a861701c /scripts/qemu-guest-agent | |
parent | block/nvme: keep BDRVNVMeState pointer in NVMeQueuePair (diff) | |
download | qemu-7838c67f22a81fcf669785cd6c0876438422071a.tar.gz qemu-7838c67f22a81fcf669785cd6c0876438422071a.tar.xz qemu-7838c67f22a81fcf669785cd6c0876438422071a.zip |
block/nvme: support nested aio_poll()
QEMU block drivers are supposed to support aio_poll() from I/O
completion callback functions. This means completion processing must be
re-entrant.
The standard approach is to schedule a BH during completion processing
and cancel it at the end of processing. If aio_poll() is invoked by a
callback function then the BH will run. The BH continues the suspended
completion processing.
All of this means that request A's cb() can synchronously wait for
request B to complete. Previously the nvme block driver would hang
because it didn't process completions from nested aio_poll().
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
Message-id: 20200617132201.1832152-8-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scripts/qemu-guest-agent')
0 files changed, 0 insertions, 0 deletions