[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 00/13] Fix transactional snapshot with dataplane
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v5 00/13] Fix transactional snapshot with dataplane and NBD export |
Date: |
Wed, 20 May 2015 14:16:03 +0800 |
v5: Patch 13: set blocker before bdrv_drain().
v4: virtio-scsi-dataplane: Use assert in ctrl/event queue handler. [Paolo]
Protect mirror complete in new patch 13. [Wen]
Add Max's rev-by in 02, 03, 04.
Fix 05, 06 per Max's comments.
Reported by Paolo.
Unlike the iohandler in main loop, iothreads currently process the event
notifier used by virtio-blk ioeventfd in nested aio_poll. This is dangerous
without proper protection, because guest requests could sneak to block layer
where they mustn't.
For example, a QMP transaction may involve multiple bdrv_drain_all() in
handling the list of AioContext it works on. If an aio_poll in one of the
bdrv_drain_all() happens to process a guest VQ kick, and dispatches the
ioeventfd event to virtio-blk, a new guest write is then submitted, and voila,
the transaction semantics is violated.
This series avoids this problem by disabling virtio-blk handlers during
bdrv_drain_all() and transactions.
- Patches 1~3 add the block layer op blocker change notifier code.
- Patches 4,5 secure virtio-blk dataplane.
- Patch 6 protects virtio-scsi dataplane.
- Patch 7 secures nbd export.
- Patch 8~11 protect each transaction type from being voilated by new IO
generated in nested aio_poll.
- Patch 12 protects bdrv_drain and bdrv_drain_all.
- Patch 13 protects mirror complete.
Fam Zheng (13):
block: Add op blocker type "device IO"
block: Add op blocker notifier list
block-backend: Add blk_op_blocker_add_notifier
virtio-blk: Move complete_request to 'ops' structure
virtio-blk: Don't handle output when there is "device IO" op blocker
virtio-scsi-dataplane: Add "device IO" op blocker listener
nbd-server: Clear "can_read" when "device io" blocker is set
blockdev: Block device IO during internal snapshot transaction
blockdev: Block device IO during external snapshot transaction
blockdev: Block device IO during drive-backup transaction
blockdev: Block device IO during blockdev-backup transaction
block: Block "device IO" during bdrv_drain and bdrv_drain_all
block/mirror: Block "device IO" during mirror exit
block.c | 35 ++++++++++++++++++
block/block-backend.c | 6 +++
block/io.c | 22 ++++++++++-
block/mirror.c | 9 ++++-
blockdev.c | 49 ++++++++++++++++++++----
blockjob.c | 1 +
hw/block/dataplane/virtio-blk.c | 37 ++++++++++++++++---
hw/block/virtio-blk.c | 65 ++++++++++++++++++++++++++++++--
hw/scsi/virtio-scsi-dataplane.c | 82 +++++++++++++++++++++++++++++++----------
hw/scsi/virtio-scsi.c | 4 ++
include/block/block.h | 9 +++++
include/block/block_int.h | 3 ++
include/hw/virtio/virtio-blk.h | 17 +++++++--
include/hw/virtio/virtio-scsi.h | 3 ++
include/sysemu/block-backend.h | 2 +
migration/block.c | 1 +
nbd.c | 24 ++++++++++++
17 files changed, 328 insertions(+), 41 deletions(-)
--
2.4.1
- [Qemu-devel] [PATCH v5 00/13] Fix transactional snapshot with dataplane and NBD export,
Fam Zheng <=
- [Qemu-devel] [PATCH v5 01/13] block: Add op blocker type "device IO", Fam Zheng, 2015/05/20
- [Qemu-devel] [PATCH v5 02/13] block: Add op blocker notifier list, Fam Zheng, 2015/05/20
- [Qemu-devel] [PATCH v5 03/13] block-backend: Add blk_op_blocker_add_notifier, Fam Zheng, 2015/05/20
- [Qemu-devel] [PATCH v5 04/13] virtio-blk: Move complete_request to 'ops' structure, Fam Zheng, 2015/05/20
- [Qemu-devel] [PATCH v5 05/13] virtio-blk: Don't handle output when there is "device IO" op blocker, Fam Zheng, 2015/05/20
- [Qemu-devel] [PATCH v5 06/13] virtio-scsi-dataplane: Add "device IO" op blocker listener, Fam Zheng, 2015/05/20