block, bfq: invoke flush_idle_tree after reparent_active_queues in pd_offline
authorPaolo Valente <paolo.valente@linaro.org>
Sat, 21 Mar 2020 09:45:21 +0000 (10:45 +0100)
committerJens Axboe <axboe@kernel.dk>
Sat, 21 Mar 2020 20:31:03 +0000 (14:31 -0600)
commit4d38a87fbb77fb9ff2ff4e914162a8ae6453eff5
treed99e48a0a8dc3b968ad63f9c165065d648bc8fae
parent576682fa52cbd95deb3773449566274f206acc58
block, bfq: invoke flush_idle_tree after reparent_active_queues in pd_offline

In bfq_pd_offline(), the function bfq_flush_idle_tree() is invoked to
flush the rb tree that contains all idle entities belonging to the pd
(cgroup) being destroyed. In particular, bfq_flush_idle_tree() is
invoked before bfq_reparent_active_queues(). Yet the latter may happen
to add some entities to the idle tree. It happens if, in some of the
calls to bfq_bfqq_move() performed by bfq_reparent_active_queues(),
the queue to move is empty and gets expired.

This commit simply reverses the invocation order between
bfq_flush_idle_tree() and bfq_reparent_active_queues().

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