qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 00/19] Drain fixes and cleanups, part 2
@ 2017-12-21 14:22 Kevin Wolf
  2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 01/19] block: Remove unused bdrv_requests_pending Kevin Wolf
                   ` (18 more replies)
  0 siblings, 19 replies; 27+ messages in thread
From: Kevin Wolf @ 2017-12-21 14:22 UTC (permalink / raw)
  To: qemu-block; +Cc: kwolf, famz, pbonzini, qemu-devel

This is the second part of my work to fix drain and hopefully to prevent
it from attracting bugs as much as it did in the past. There is
definitely at least a third part coming after this, see below.

In this series, the following improvments are made:
* Fix several bugs and inconsistencies
* Create lots of unit tests for the drain functions
* Introduce bdrv_subtree_drained_begin/end() to drain a whole subtree
  rather than only a single node
* Use this to make bdrv_reopen() safe (graph changes in callbacks
  called during its internal bdrv_drain_all() frequently broke it)

Planned for part three: Make graph modifications in callbacks safe by
avoiding BDRV_POLL_WHILE() calls while we're recursing through the
graph. We can recurse before BDRV_POLL_WHILE(), after it or while
evaluating its condition, but never call any callbacks while we're
iterating child or parent lists.

v2:
- Improved the commit message of patch 3 [Fam]
- Split the coroutine test cases in individual parts [Paolo]
- Export bdrv_(un)apply_subtree_drain  rather than
  bdrv_do_drained_begin/end() [Paolo]

Fam Zheng (1):
  block: Remove unused bdrv_requests_pending

Kevin Wolf (18):
  block: Assert drain_all is only called from main AioContext
  block: Make bdrv_drain() driver callbacks non-recursive
  test-bdrv-drain: Test callback for bdrv_drain
  test-bdrv-drain: Test bs->quiesce_counter
  blockjob: Pause job on draining any job BDS
  test-bdrv-drain: Test drain vs. block jobs
  block: Don't block_job_pause_all() in bdrv_drain_all()
  block: Nested drain_end must still call callbacks
  test-bdrv-drain: Test nested drain sections
  block: Don't notify parents in drain call chain
  block: Add bdrv_subtree_drained_begin/end()
  test-bdrv-drain: Tests for bdrv_subtree_drain
  test-bdrv-drain: Test behaviour in coroutine context
  test-bdrv-drain: Recursive draining with multiple parents
  block: Allow graph changes in subtree drained section
  test-bdrv-drain: Test graph changes in drained section
  commit: Simplify reopen of base
  block: Keep nodes drained between reopen_queue/multiple

 include/block/block.h     |  15 +-
 include/block/block_int.h |   6 +-
 block.c                   |  66 ++++--
 block/commit.c            |   8 +-
 block/io.c                | 151 +++++++++----
 block/replication.c       |   6 +
 blockjob.c                |  22 +-
 qemu-io-cmds.c            |   3 +
 tests/test-bdrv-drain.c   | 528 +++++++++++++++++++++++++++++++++++++++++++++-
 9 files changed, 717 insertions(+), 88 deletions(-)

-- 
2.13.6

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

end of thread, other threads:[~2018-01-08 18:00 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-21 14:22 [Qemu-devel] [PATCH v2 00/19] Drain fixes and cleanups, part 2 Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 01/19] block: Remove unused bdrv_requests_pending Kevin Wolf
2018-01-03 16:09   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 02/19] block: Assert drain_all is only called from main AioContext Kevin Wolf
2018-01-08 16:09   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 03/19] block: Make bdrv_drain() driver callbacks non-recursive Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 04/19] test-bdrv-drain: Test callback for bdrv_drain Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 05/19] test-bdrv-drain: Test bs->quiesce_counter Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 06/19] blockjob: Pause job on draining any job BDS Kevin Wolf
2018-01-08 14:44   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 07/19] test-bdrv-drain: Test drain vs. block jobs Kevin Wolf
2018-01-08 15:21   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 08/19] block: Don't block_job_pause_all() in bdrv_drain_all() Kevin Wolf
2018-01-08 15:15   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 09/19] block: Nested drain_end must still call callbacks Kevin Wolf
2018-01-08 15:41   ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2018-01-08 18:00     ` Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 10/19] test-bdrv-drain: Test nested drain sections Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 11/19] block: Don't notify parents in drain call chain Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 12/19] block: Add bdrv_subtree_drained_begin/end() Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 13/19] test-bdrv-drain: Tests for bdrv_subtree_drain Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 14/19] test-bdrv-drain: Test behaviour in coroutine context Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 15/19] test-bdrv-drain: Recursive draining with multiple parents Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 16/19] block: Allow graph changes in subtree drained section Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 17/19] test-bdrv-drain: Test graph changes in " Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 18/19] commit: Simplify reopen of base Kevin Wolf
2017-12-21 14:22 ` [Qemu-devel] [PATCH v2 19/19] block: Keep nodes drained between reopen_queue/multiple Kevin Wolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).