mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
block: ignore_bds_parents parameter for drain functions
In the future, bdrv_drained_all_begin/end() will drain all invidiual nodes separately rather than whole subtrees. This means that we don't want to propagate the drain to all parents any more: If the parent is a BDS, it will already be drained separately. Recursing to all parents is unnecessary work and would make it an O(n²) operation. Prepare the drain function for the changed drain_all by adding an ignore_bds_parents parameter to the internal implementation that prevents the propagation of the drain to BDS parents. We still (have to) propagate it to non-BDS parents like BlockBackends or Jobs because those are not drained separately. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
c8ca33d06d
commit
6cd5c9d7b2
5 changed files with 78 additions and 44 deletions
|
@ -577,6 +577,12 @@ struct BdrvChildRole {
|
|||
* points to. */
|
||||
bool stay_at_node;
|
||||
|
||||
/* If true, the parent is a BlockDriverState and bdrv_next_all_states()
|
||||
* will return it. This information is used for drain_all, where every node
|
||||
* will be drained separately, so the drain only needs to be propagated to
|
||||
* non-BDS parents. */
|
||||
bool parent_is_bds;
|
||||
|
||||
void (*inherit_options)(int *child_flags, QDict *child_options,
|
||||
int parent_flags, QDict *parent_options);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue