From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52418) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zoinx-0002dT-BX for qemu-devel@nongnu.org; Tue, 20 Oct 2015 22:07:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zoinw-0003pP-Hd for qemu-devel@nongnu.org; Tue, 20 Oct 2015 22:07:05 -0400 From: Fam Zheng Date: Wed, 21 Oct 2015 10:06:37 +0800 Message-Id: <1445393209-26545-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v5 00/12] block: Protect nested event loop with bdrv_drained_begin and bdrv_drained_end List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, stefanha@redhat.com, qemu-block@nongnu.org v5: Rebase onto Kevin's block tree. 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 | 37 ++++++++++++++++--- hw/block/dataplane/virtio-blk.c | 5 ++- hw/scsi/virtio-scsi-dataplane.c | 22 +++++++---- include/block/aio.h | 39 ++++++++++++++++++++ include/block/block.h | 26 +++++++++++++ include/block/block_int.h | 8 ++++ iohandler.c | 3 +- nbd.c | 4 +- tests/test-aio.c | 82 ++++++++++++++++++++++++++++------------- 22 files changed, 286 insertions(+), 93 deletions(-) -- 2.4.3