Commit 5ff047e3 authored by Fam Zheng's avatar Fam Zheng Committed by Jens Axboe

bfq: Extract bfq_group_set_weight from bfq_io_set_weight_legacy

This function will be useful when we update weight from the soon-coming
per-device interface.
Signed-off-by: default avatarFam Zheng <zhengfeiran@bytedance.com>
Reviewed-by: default avatarPaolo Valente <paolo.valente@linaro.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e9d3c866
...@@ -919,34 +919,16 @@ static int bfq_io_show_weight(struct seq_file *sf, void *v) ...@@ -919,34 +919,16 @@ static int bfq_io_show_weight(struct seq_file *sf, void *v)
return 0; return 0;
} }
static int bfq_io_set_weight_legacy(struct cgroup_subsys_state *css, static void bfq_group_set_weight(struct bfq_group *bfqg, u64 weight)
struct cftype *cftype,
u64 val)
{ {
struct blkcg *blkcg = css_to_blkcg(css);
struct bfq_group_data *bfqgd = blkcg_to_bfqgd(blkcg);
struct blkcg_gq *blkg;
int ret = -ERANGE;
if (val < BFQ_MIN_WEIGHT || val > BFQ_MAX_WEIGHT)
return ret;
ret = 0;
spin_lock_irq(&blkcg->lock);
bfqgd->weight = (unsigned short)val;
hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) {
struct bfq_group *bfqg = blkg_to_bfqg(blkg);
if (!bfqg)
continue;
/* /*
* Setting the prio_changed flag of the entity * Setting the prio_changed flag of the entity
* to 1 with new_weight == weight would re-set * to 1 with new_weight == weight would re-set
* the value of the weight to its ioprio mapping. * the value of the weight to its ioprio mapping.
* Set the flag only if necessary. * Set the flag only if necessary.
*/ */
if ((unsigned short)val != bfqg->entity.new_weight) { if ((unsigned short)weight != bfqg->entity.new_weight) {
bfqg->entity.new_weight = (unsigned short)val; bfqg->entity.new_weight = (unsigned short)weight;
/* /*
* Make sure that the above new value has been * Make sure that the above new value has been
* stored in bfqg->entity.new_weight before * stored in bfqg->entity.new_weight before
...@@ -965,6 +947,28 @@ static int bfq_io_set_weight_legacy(struct cgroup_subsys_state *css, ...@@ -965,6 +947,28 @@ static int bfq_io_set_weight_legacy(struct cgroup_subsys_state *css,
smp_wmb(); smp_wmb();
bfqg->entity.prio_changed = 1; bfqg->entity.prio_changed = 1;
} }
}
static int bfq_io_set_weight_legacy(struct cgroup_subsys_state *css,
struct cftype *cftype,
u64 val)
{
struct blkcg *blkcg = css_to_blkcg(css);
struct bfq_group_data *bfqgd = blkcg_to_bfqgd(blkcg);
struct blkcg_gq *blkg;
int ret = -ERANGE;
if (val < BFQ_MIN_WEIGHT || val > BFQ_MAX_WEIGHT)
return ret;
ret = 0;
spin_lock_irq(&blkcg->lock);
bfqgd->weight = (unsigned short)val;
hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) {
struct bfq_group *bfqg = blkg_to_bfqg(blkg);
if (bfqg)
bfq_group_set_weight(bfqg, val);
} }
spin_unlock_irq(&blkcg->lock); spin_unlock_irq(&blkcg->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment