v4: Rebase on to master so fix the "bdrv_move_feature_fields" issue.
v3: Call bdrv_drain unconditionally in bdrv_drained_begin. Document the internal I/O implications between bdrv_drain_begin and end. The nested aio_poll()'s in block layer has a bug that new r/w requests from ioeventfds and nbd exports are processed, which might break the caller's semantics (qmp_transaction) or even pointers (bdrv_reopen). Fam Zheng (12): aio: Add "is_external" flag for event handlers nbd: Mark fd handlers client type as "external" dataplane: Mark host notifiers' client type as "external" aio: introduce aio_{disable,enable}_external block: Introduce "drained begin/end" API block: Add "drained begin/end" for transactional external snapshot block: Add "drained begin/end" for transactional backup block: Add "drained begin/end" for transactional blockdev-backup block: Add "drained begin/end" for internal snapshot block: Introduce BlockDriver.bdrv_drain callback qed: Implement .bdrv_drain tests: Add test case for aio_disable_external aio-posix.c | 9 ++++- aio-win32.c | 8 +++- async.c | 3 +- block/curl.c | 14 ++++--- block/io.c | 23 +++++++++++- block/iscsi.c | 9 ++--- block/linux-aio.c | 5 ++- block/nbd-client.c | 10 +++-- block/nfs.c | 17 ++++----- block/qed.c | 7 ++++ block/sheepdog.c | 38 ++++++++++++------- block/ssh.c | 5 ++- block/win32-aio.c | 5 ++- blockdev.c | 27 +++++++++++--- hw/block/dataplane/virtio-blk.c | 5 ++- hw/scsi/virtio-scsi-dataplane.c | 22 +++++++---- include/block/aio.h | 39 ++++++++++++++++++++ include/block/block.h | 24 ++++++++++++ include/block/block_int.h | 8 ++++ iohandler.c | 3 +- nbd.c | 4 +- tests/test-aio.c | 82 ++++++++++++++++++++++++++++------------- 22 files changed, 274 insertions(+), 93 deletions(-) -- 2.4.3