Based-on: <20191111160216.197086-1-mre...@redhat.com> (“block: Fix check_to_replace_node()”)
This is preliminary work for v7 of “Deal with filters”. As Kevin has noted, there may be e.g. multiple storage children, and there should probably be some way for drivers to signal what they use each child for. Before this series, this is done in a way with the child_* BdrvChildRole objects (i.e., child_file, child_format, child_backing). However, they don’t really suit that task, for multiple reasons: (1) They don’t formally mean anything. (2) Drivers may or may not use them. We have tests that just copy child_backing and overwrite a single callback to suit their need. (3) You can’t combine them (e.g. for children that store both data and metadata). The current BdrvChildRole structure is really just a way to contact the parent about any changes regarding the child, so it doesn’t describe a role but a class. Hence this series renames it to BdrvChildClass. Then we can introduce a real BdrvChildRole, which is an enum that captures the roles a child can have in a bit field, so they can be combined. It turns out that we can use this role to unify child_file, child_format, and child_backing into a generic child_of_bds class that can decide what to do for each child (e.g. when it comes to flag inheritance) based on the BdrvChildRole. This also applies to bdrv_format_default_perms() and bdrv_filter_default_perms(): We can unify them in a generic bdrv_filter_perms() that has different paths for filtered, backing, metadata, and pure-data children. Max Reitz (31): block: Rename BdrvChildRole to BdrvChildClass block: Add BdrvChildRole block: Add BdrvChildRole to BdrvChild block: Pass BdrvChildRole to bdrv_child_perm() block: Drop BdrvChildClass.stay_at_node block: Keep BDRV_O_NO_IO in *inherited_fmt_options block: Pass BdrvChildRole to .inherit_options() block: Unify bdrv_*inherited_options() block: Unify bdrv_child_cb_attach() block: Unify bdrv_child_cb_detach() block: Add child_of_bds block: Distinguish paths in *_format_default_perms block: Pull out bdrv_default_perms_for_backing() block: Pull out bdrv_default_perms_for_storage() block: Split bdrv_default_perms_for_storage() block: Add bdrv_default_perms() raw-format: Split raw_read_options() block: Switch child_format users to child_of_bds block: Drop child_format block: Make backing files child_of_bds children block: Drop child_backing block: Make format drivers use child_of_bds block: Make filter drivers use child_of_bds block: Use child_of_bds in remaining places tests: Use child_of_bds instead of child_file block: Use bdrv_default_perms() block: Make bdrv_filter_default_perms() static block: Drop bdrv_format_default_perms() block: Drop child_file block: Pass BdrvChildRole in remaining cases block: Drop @child_class from bdrv_child_perm() block.c | 477 +++++++++++++++++++++--------------- block/backup-top.c | 11 +- block/blkdebug.c | 10 +- block/blklogwrites.c | 17 +- block/blkreplay.c | 7 +- block/blkverify.c | 12 +- block/block-backend.c | 20 +- block/bochs.c | 6 +- block/cloop.c | 6 +- block/commit.c | 2 +- block/copy-on-read.c | 7 +- block/crypto.c | 6 +- block/dmg.c | 6 +- block/io.c | 22 +- block/mirror.c | 2 +- block/parallels.c | 6 +- block/qcow.c | 6 +- block/qcow2.c | 20 +- block/qed.c | 6 +- block/quorum.c | 11 +- block/raw-format.c | 128 ++++++---- block/replication.c | 5 +- block/throttle.c | 7 +- block/vdi.c | 6 +- block/vhdx.c | 6 +- block/vmdk.c | 22 +- block/vpc.c | 6 +- block/vvfat.c | 11 +- blockjob.c | 8 +- include/block/block.h | 46 +++- include/block/block_int.h | 54 ++-- tests/test-bdrv-drain.c | 72 +++--- tests/test-bdrv-graph-mod.c | 10 +- tests/test-block-iothread.c | 17 +- 34 files changed, 625 insertions(+), 433 deletions(-) -- 2.23.0