Skip to content

Drain fixes and cleanups, part 2

Kevin Wolf qemu-devel 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest19 patches 7 repliesIn review
  2. v119 patches 14 repliesSuperseded

Changes in v2 from the cover letter

- 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]

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/19block: Remove unused bdrv_requests_pendingblock/io.c include/block/block_int.h+0 -191 reply
2/19block: Assert drain_all is only called from main AioContextblock/io.c+6 -01 reply
3/19block: Make bdrv_drain() driver callbacks non-recursiveblock/io.c+9 -70 replies
4/19test-bdrv-drain: Test callback for bdrv_draintests/test-bdrv-drain.c+62 -70 replies
5/19test-bdrv-drain: Test bs->quiesce_countertests/test-bdrv-drain.c+45 -00 replies
6/19blockjob: Pause job on draining any job BDSblockjob.c+9 -131 reply
7/19test-bdrv-drain: Test drain vs. block jobstests/test-bdrv-drain.c+121 -01 reply
8/19block: Don't block_job_pause_all() in bdrv_drain_all()block/io.c tests/test-bdrv-drain.c+4 -101 reply
9/19block: Nested drain_end must still call callbacksblock/io.c+7 -52 replies
10/19test-bdrv-drain: Test nested drain sectionstests/test-bdrv-drain.c+57 -00 replies
11/19block: Don't notify parents in drain call chainblock.c block/io.c include/block/block.h+45 -190 replies
12/19block: Add bdrv_subtree_drained_begin/end()block/io.c include/block/block.h+56 -110 replies
13/19test-bdrv-drain: Tests for bdrv_subtree_draintests/test-bdrv-drain.c+26 -10 replies
14/19test-bdrv-drain: Test behaviour in coroutine contexttests/test-bdrv-drain.c+59 -00 replies
15/19test-bdrv-drain: Recursive draining with multiple parentstests/test-bdrv-drain.c+74 -00 replies
16/19block: Allow graph changes in subtree drained sectionblock.c block/io.c include/block/block.h +1 more+58 -90 replies
17/19test-bdrv-drain: Test graph changes in drained sectiontests/test-bdrv-drain.c+80 -00 replies
18/19commit: Simplify reopen of baseblock/commit.c+1 -70 replies
19/19block: Keep nodes drained between reopen_queue/multipleblock.c block/replication.c qemu-io-cmds.c+25 -70 replies

Reviews trailers per patch

8 of 19 patches have a Reviewed-by or Acked-by.

PatchFam ZhengAlberto Garcia
1/19R-b
2/19R-b R-b
3/19R-b
4/19
5/19
6/19R-b
7/19R-b
8/19R-b
9/19
10/19
11/19
12/19
13/19
14/19
15/19
16/19
17/19
18/19R-b
19/19R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [Qemu-devel] [PATCH v2 00/19] Drain fixes and cleanups, part 2

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(-)
Signature · 1 line
2.13.6