[PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()

Max Reitz posted 23 patches 4 years, 5 months ago
Test asan passed
Test checkpatch passed
Test FreeBSD passed
Test docker-mingw@fedora passed
Test docker-clang@ubuntu passed
Test docker-quick@centos7 passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20191111160216.197086-1-mreitz@redhat.com
Maintainers: Markus Armbruster <armbru@redhat.com>, Xie Changlong <xiechanglong.d@gmail.com>, Wen Congyang <wencongyang2@huawei.com>, John Snow <jsnow@redhat.com>, Max Reitz <mreitz@redhat.com>, Alberto Garcia <berto@igalia.com>, Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>
There is a newer version of this series
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(-)
[PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()
Posted by Max Reitz 4 years, 5 months ago
Based-on: <20191108123455.39445-1-mreitz@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


Re: [PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()
Posted by Vladimir Sementsov-Ogievskiy 4 years, 5 months ago
3 last iotests patches don't apply now.. Do you have a branch pushed somewhere?

11.11.2019 19:01, Max Reitz wrote:
> Based-on: <20191108123455.39445-1-mreitz@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(-)
> 


-- 
Best regards,
Vladimir
Re: [PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()
Posted by Max Reitz 4 years, 5 months ago
On 29.11.19 13:24, Vladimir Sementsov-Ogievskiy wrote:
> 3 last iotests patches don't apply now.. Do you have a branch pushed somewhere?

Hm, it’s based on “iotests: Test failing mirror complete”, maybe because
of that.

Does this work?

https://git.xanclic.moe/XanClic/qemu.git fix-can-replace-v2

Max

Re: [PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()
Posted by Vladimir Sementsov-Ogievskiy 4 years, 5 months ago
29.11.2019 15:49, Max Reitz wrote:
> On 29.11.19 13:24, Vladimir Sementsov-Ogievskiy wrote:
>> 3 last iotests patches don't apply now.. Do you have a branch pushed somewhere?
> 
> Hm, it’s based on “iotests: Test failing mirror complete”, maybe because
> of that.
> 
> Does this work?
> 
> https://git.xanclic.moe/XanClic/qemu.git fix-can-replace-v2
> 

Hmm, I remember in past, fetching from this repo always hang for me.
But now it works, thanks.


-- 
Best regards,
Vladimir
Re: [PATCH for-5.0 v2 00/23] block: Fix check_to_replace_node()
Posted by Max Reitz 4 years, 5 months ago
On 29.11.19 13:55, Vladimir Sementsov-Ogievskiy wrote:
> 29.11.2019 15:49, Max Reitz wrote:
>> On 29.11.19 13:24, Vladimir Sementsov-Ogievskiy wrote:
>>> 3 last iotests patches don't apply now.. Do you have a branch pushed somewhere?
>>
>> Hm, it’s based on “iotests: Test failing mirror complete”, maybe because
>> of that.
>>
>> Does this work?
>>
>> https://git.xanclic.moe/XanClic/qemu.git fix-can-replace-v2
>>
> 
> Hmm, I remember in past, fetching from this repo always hang for me.
> But now it works, thanks.

Possibly because I disabled Gravatar fetching. :-)

(No idea why that would affect git, but I do know it made the normal
browser representation quicker.)

Max