Based-on: <20191108123455.39445-1-mre...@redhat.com> (“iotests: Test failing mirror complete”)
(Because both add cases to 041.) Hi, For what this series does, see the cover letter of v1: https://lists.nongnu.org/archive/html/qemu-block/2019-09/msg01027.html Now, in v2 I’ve addressed Vladimir’s comments: - Patch 5: Extend explanation in the commit message - Patch 6: Prefer driver-specific .bdrv_recurse_can_replace() implementation before the generic one for filters - Patch 8: Some more s/BdrvChild \*/QuorumChild/ - Patch 15: Fix typo in the commit message - Patch 17: Added - Patch 18: - Split @path into @root + @path - In one instance, use x = next(y, z) instead of try: x = next(y); except StopIteration: x = z; - %s/'''/"""/ - Patch 19: Fallout from the patch 18 changes - Patch 20: Fix in the commit message (uncommenting -> commenting out) - Patch 21: - Check full stderr message by inspecting the VM log - Fallout from the patch 18 changes - %s/'''/"""/ - Patch 22: - Skip case if COR is unsupported - Fallout from the patch 18 changes - %s/'''/"""/ - Patch 23: - Added more comments - Skip cases if throttle/COR/quorum (as appropriate) is unsupported - Use imgfmt instead of hard-coding qcow2 - Fallout from the patch 18 changes - %s/'''/"""/ git-backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/23:[----] [--] 'blockdev: Allow external snapshots everywhere' 002/23:[----] [--] 'blockdev: Allow resizing everywhere' 003/23:[----] [--] 'block: Drop bdrv_is_first_non_filter()' 004/23:[----] [--] 'iotests: Let 041 use -blockdev for quorum children' 005/23:[----] [--] 'quorum: Fix child permissions' 006/23:[0012] [FC] 'block: Add bdrv_recurse_can_replace()' 007/23:[----] [--] 'blkverify: Implement .bdrv_recurse_can_replace()' 008/23:[0006] [FC] 'quorum: Store children in own structure' 009/23:[----] [--] 'quorum: Add QuorumChild.to_be_replaced' 010/23:[----] [--] 'quorum: Implement .bdrv_recurse_can_replace()' 011/23:[----] [--] 'block: Use bdrv_recurse_can_replace()' 012/23:[----] [--] 'block: Remove bdrv_recurse_is_first_non_filter()' 013/23:[----] [--] 'mirror: Double-check immediately before replacing' 014/23:[----] [--] 'quorum: Stop marking it as a filter' 015/23:[----] [--] 'mirror: Prevent loops' 016/23:[----] [--] 'iotests: Use complete_and_wait() in 155' 017/23:[down] 'iotests: Use skip_if_unsupported decorator in 041' 018/23:[0037] [FC] 'iotests: Add VM.assert_block_path()' 019/23:[0004] [FC] 'iotests: Resolve TODOs in 041' 020/23:[----] [--] 'iotests: Use self.image_len in TestRepairQuorum' 021/23:[0027] [FC] 'iotests: Add tests for invalid Quorum @replaces' 022/23:[0007] [FC] 'iotests: Check that @replaces can replace filters' 023/23:[0141] [FC] 'iotests: Mirror must not attempt to create loops' Max Reitz (23): blockdev: Allow external snapshots everywhere blockdev: Allow resizing everywhere block: Drop bdrv_is_first_non_filter() iotests: Let 041 use -blockdev for quorum children quorum: Fix child permissions block: Add bdrv_recurse_can_replace() blkverify: Implement .bdrv_recurse_can_replace() quorum: Store children in own structure quorum: Add QuorumChild.to_be_replaced quorum: Implement .bdrv_recurse_can_replace() block: Use bdrv_recurse_can_replace() block: Remove bdrv_recurse_is_first_non_filter() mirror: Double-check immediately before replacing quorum: Stop marking it as a filter mirror: Prevent loops iotests: Use complete_and_wait() in 155 iotests: Use skip_if_unsupported decorator in 041 iotests: Add VM.assert_block_path() iotests: Resolve TODOs in 041 iotests: Use self.image_len in TestRepairQuorum iotests: Add tests for invalid Quorum @replaces iotests: Check that @replaces can replace filters iotests: Mirror must not attempt to create loops block.c | 115 ++++++---- block/blkverify.c | 20 +- block/copy-on-read.c | 9 - block/mirror.c | 31 ++- block/quorum.c | 161 +++++++++++--- block/replication.c | 7 - block/throttle.c | 8 - blockdev.c | 58 ++++- include/block/block.h | 5 - include/block/block_int.h | 19 +- tests/qemu-iotests/041 | 402 ++++++++++++++++++++++++++++++---- tests/qemu-iotests/041.out | 4 +- tests/qemu-iotests/155 | 7 +- tests/qemu-iotests/iotests.py | 59 +++++ 14 files changed, 715 insertions(+), 190 deletions(-) -- 2.23.0