summaryrefslogtreecommitdiffstats
path: root/block/cfq-iosched.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r--block/cfq-iosched.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index baa8459f7064..ea88d8905bbd 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1747,26 +1747,31 @@ static ssize_t __cfqg_set_weight_device(struct kernfs_open_file *of,
1747 struct cfq_group *cfqg; 1747 struct cfq_group *cfqg;
1748 struct cfq_group_data *cfqgd; 1748 struct cfq_group_data *cfqgd;
1749 int ret; 1749 int ret;
1750 u64 v;
1750 1751
1751 ret = blkg_conf_prep(blkcg, &blkcg_policy_cfq, buf, &ctx); 1752 ret = blkg_conf_prep(blkcg, &blkcg_policy_cfq, buf, &ctx);
1752 if (ret) 1753 if (ret)
1753 return ret; 1754 return ret;
1754 1755
1756 ret = -EINVAL;
1757 if (sscanf(ctx.body, "%llu", &v) != 1)
1758 goto out_finish;
1759
1755 cfqg = blkg_to_cfqg(ctx.blkg); 1760 cfqg = blkg_to_cfqg(ctx.blkg);
1756 cfqgd = blkcg_to_cfqgd(blkcg); 1761 cfqgd = blkcg_to_cfqgd(blkcg);
1757 1762
1758 ret = -ERANGE; 1763 ret = -ERANGE;
1759 if (!ctx.v || (ctx.v >= CFQ_WEIGHT_MIN && ctx.v <= CFQ_WEIGHT_MAX)) { 1764 if (!v || (v >= CFQ_WEIGHT_MIN && v <= CFQ_WEIGHT_MAX)) {
1760 if (!is_leaf_weight) { 1765 if (!is_leaf_weight) {
1761 cfqg->dev_weight = ctx.v; 1766 cfqg->dev_weight = v;
1762 cfqg->new_weight = ctx.v ?: cfqgd->weight; 1767 cfqg->new_weight = v ?: cfqgd->weight;
1763 } else { 1768 } else {
1764 cfqg->dev_leaf_weight = ctx.v; 1769 cfqg->dev_leaf_weight = v;
1765 cfqg->new_leaf_weight = ctx.v ?: cfqgd->leaf_weight; 1770 cfqg->new_leaf_weight = v ?: cfqgd->leaf_weight;
1766 } 1771 }
1767 ret = 0; 1772 ret = 0;
1768 } 1773 }
1769 1774out_finish:
1770 blkg_conf_finish(&ctx); 1775 blkg_conf_finish(&ctx);
1771 return ret ?: nbytes; 1776 return ret ?: nbytes;
1772} 1777}