|
@@ -1275,12 +1275,16 @@ __cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
|
|
|
static void
|
|
|
cfq_update_group_weight(struct cfq_group *cfqg)
|
|
|
{
|
|
|
- BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
|
|
|
-
|
|
|
if (cfqg->new_weight) {
|
|
|
cfqg->weight = cfqg->new_weight;
|
|
|
cfqg->new_weight = 0;
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+static void
|
|
|
+cfq_update_group_leaf_weight(struct cfq_group *cfqg)
|
|
|
+{
|
|
|
+ BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
|
|
|
|
|
|
if (cfqg->new_leaf_weight) {
|
|
|
cfqg->leaf_weight = cfqg->new_leaf_weight;
|
|
@@ -1299,7 +1303,7 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
|
|
|
/* add to the service tree */
|
|
|
BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
|
|
|
|
|
|
- cfq_update_group_weight(cfqg);
|
|
|
+ cfq_update_group_leaf_weight(cfqg);
|
|
|
__cfq_group_service_tree_add(st, cfqg);
|
|
|
|
|
|
/*
|
|
@@ -1323,6 +1327,7 @@ cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
|
|
|
*/
|
|
|
while ((parent = cfqg_parent(pos))) {
|
|
|
if (propagate) {
|
|
|
+ cfq_update_group_weight(pos);
|
|
|
propagate = !parent->nr_active++;
|
|
|
parent->children_weight += pos->weight;
|
|
|
}
|