Files
i2som-imx-linux/block
Paolo Valente 8b3b22aa7c block, bfq: fix queue removal from weights tree
[ Upstream commit 9dee8b3b05 ]

bfq maintains an ordered list, through a red-black tree, of unique
weights of active bfq_queues. This list is used to detect whether there
are active queues with differentiated weights. The weight of a queue is
removed from the list when both the following two conditions become
true:

(1) the bfq_queue is flagged as inactive
(2) the has no in-flight request any longer;

Unfortunately, in the rare cases where condition (2) becomes true before
condition (1), the removal fails, because the function to remove the
weight of the queue (bfq_weights_tree_remove) is rightly invoked in the
path that deactivates the bfq_queue, but mistakenly invoked *before* the
function that actually performs the deactivation (bfq_deactivate_bfqq).

This commits moves the invocation of bfq_weights_tree_remove for
condition (1) to after bfq_deactivate_bfqq. As a consequence of this
move, it is necessary to add a further reference to the queue when the
weight of a queue is added, because the queue might otherwise be freed
before bfq_weights_tree_remove is invoked. This commit adds this
reference and makes all related modifications.

Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-04-05 22:34:45 +02:00
..
2018-11-07 13:42:32 -07:00
2018-11-30 14:48:04 -07:00
2018-12-16 19:53:47 -07:00
2018-11-15 12:13:25 -07:00
2018-12-21 08:47:58 -07:00
2018-11-16 08:34:06 -07:00
2018-10-25 11:17:40 -06:00
2018-11-07 13:42:32 -07:00