block, bfq: make reparent_leaf_entity actually work only on leaf entities
authorPaolo Valente <paolo.valente@linaro.org>
Sat, 21 Mar 2020 09:45:20 +0000 (10:45 +0100)
committerJens Axboe <axboe@kernel.dk>
Sat, 21 Mar 2020 20:31:02 +0000 (14:31 -0600)
commit576682fa52cbd95deb3773449566274f206acc58
treed8c341262fb2476869d09dbe2ec9e340404683e6
parentc8997736650060594845e42c5d01d3118aec8d25
block, bfq: make reparent_leaf_entity actually work only on leaf entities

bfq_reparent_leaf_entity() reparents the input leaf entity (a leaf
entity represents just a bfq_queue in an entity tree). Yet, the input
entity is guaranteed to always be a leaf entity only in two-level
entity trees. In this respect, because of the error fixed by
commit 14afc5936197 ("block, bfq: fix overwrite of bfq_group pointer
in bfq_find_set_group()"), all (wrongly collapsed) entity trees happened
to actually have only two levels. After the latter commit, this does not
hold any longer.

This commit fixes this problem by modifying
bfq_reparent_leaf_entity(), so that it searches an active leaf entity
down the path that stems from the input entity. Such a leaf entity is
guaranteed to exist when bfq_reparent_leaf_entity() is invoked.

Tested-by: cki-project@redhat.com
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bfq-cgroup.c