All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 00/12] block: Protect block jobs with lock / unlock API
@ 2015-05-29 10:53 Fam Zheng
  2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 01/12] block: Use bdrv_drain to replace uncessary bdrv_drain_all Fam Zheng
                   ` (12 more replies)
  0 siblings, 13 replies; 18+ messages in thread
From: Fam Zheng @ 2015-05-29 10:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, fam, qemu-block, Jeff Cody, Stefan Hajnoczi,
	Paolo Bonzini

This is the partial work to introduce bdrv_lock / bdrv_unlock and use them in
block jobs where exclusive access to a BDS is necessary. It address the same
category of problems as [1] with a different API, as the idea proposed by Paolo
and Kevin.

What's implemented in this series is also very close to [1], i.e. pausing
ioeventfd and NBD server, with a notifier list.

The important missing pieces are converting bdrv_lock/unlock callers to
coroutine, so that they can wait in the bs->lock_queue.  In other words, this
API is not complete without that, because we can't handle the case where two
non-coroutine callers have contention, which is now asserted in bdrv_lock as
practically impossible.

[1]: https://lists.gnu.org/archive/html/qemu-block/2015-05/msg00800.html

Thanks,

Fam


Fam Zheng (12):
  block: Use bdrv_drain to replace uncessary bdrv_drain_all
  block: Introduce bdrv_lock and bdrv_unlock API
  blockdev: Lock BDS during internal snapshot transaction
  blockdev: Lock BDS during external snapshot transaction
  blockdev: Lock BDS during drive-backup transaction
  blockdev: Lock BDS during blockdev-backup transaction
  block-backend: Add blk_add_lock_unlock_notifier
  virtio-blk: Move complete_request to 'ops' structure
  virtio-blk: Don't handle output when backend is locked
  virtio-scsi-dataplane: Add backend lock listener
  nbd-server: Clear "can_read" when backend is locked
  mirror: Protect source between bdrv_drain and bdrv_swap

 block.c                         | 16 +++++++--
 block/block-backend.c           |  6 ++++
 block/io.c                      | 69 ++++++++++++++++++++++++++++++++++++
 block/mirror.c                  | 18 ++++++++--
 block/snapshot.c                |  2 +-
 blockdev.c                      | 17 +++++++--
 hw/block/dataplane/virtio-blk.c | 36 ++++++++++++++++---
 hw/block/virtio-blk.c           | 63 +++++++++++++++++++++++++++++++--
 hw/scsi/virtio-scsi-dataplane.c | 78 ++++++++++++++++++++++++++++++-----------
 hw/scsi/virtio-scsi.c           |  3 ++
 include/block/block.h           | 39 +++++++++++++++++++++
 include/block/block_int.h       |  5 +++
 include/hw/virtio/virtio-blk.h  | 17 +++++++--
 include/hw/virtio/virtio-scsi.h |  3 ++
 include/sysemu/block-backend.h  |  1 +
 migration/block.c               |  2 +-
 nbd.c                           | 21 +++++++++++
 17 files changed, 356 insertions(+), 40 deletions(-)

-- 
2.4.2

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2015-06-25 12:19 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-29 10:53 [Qemu-devel] [RFC PATCH 00/12] block: Protect block jobs with lock / unlock API Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 01/12] block: Use bdrv_drain to replace uncessary bdrv_drain_all Fam Zheng
2015-05-29 11:42   ` Paolo Bonzini
2015-06-25 12:19   ` [Qemu-devel] [PATCH for-2.4 " Paolo Bonzini
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 02/12] block: Introduce bdrv_lock and bdrv_unlock API Fam Zheng
2015-05-29 16:57   ` Eric Blake
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 03/12] blockdev: Lock BDS during internal snapshot transaction Fam Zheng
2015-05-29 11:39   ` Paolo Bonzini
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 04/12] blockdev: Lock BDS during external " Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 05/12] blockdev: Lock BDS during drive-backup transaction Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 06/12] blockdev: Lock BDS during blockdev-backup transaction Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 07/12] block-backend: Add blk_add_lock_unlock_notifier Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 08/12] virtio-blk: Move complete_request to 'ops' structure Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 09/12] virtio-blk: Don't handle output when backend is locked Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 10/12] virtio-scsi-dataplane: Add backend lock listener Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 11/12] nbd-server: Clear "can_read" when backend is locked Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 12/12] mirror: Protect source between bdrv_drain and bdrv_swap Fam Zheng
2015-05-29 12:01 ` [Qemu-devel] [RFC PATCH 00/12] block: Protect block jobs with lock / unlock API Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.