Merge tag 'x86_cache_for_6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-block.git] / block / blk-iocost.c
index 4442c7a8511256988b95d17837ac4cdde131d695..285ced3467abb10f2a926bc86588f14fefe87c07 100644 (file)
@@ -3106,9 +3106,11 @@ static ssize_t ioc_weight_write(struct kernfs_open_file *of, char *buf,
                return nbytes;
        }
 
-       ret = blkg_conf_prep(blkcg, &blkcg_policy_iocost, buf, &ctx);
+       blkg_conf_init(&ctx, buf);
+
+       ret = blkg_conf_prep(blkcg, &blkcg_policy_iocost, &ctx);
        if (ret)
-               return ret;
+               goto err;
 
        iocg = blkg_to_iocg(ctx.blkg);
 
@@ -3127,12 +3129,14 @@ static ssize_t ioc_weight_write(struct kernfs_open_file *of, char *buf,
        weight_updated(iocg, &now);
        spin_unlock(&iocg->ioc->lock);
 
-       blkg_conf_finish(&ctx);
+       blkg_conf_exit(&ctx);
        return nbytes;
 
 einval:
-       blkg_conf_finish(&ctx);
-       return -EINVAL;
+       ret = -EINVAL;
+err:
+       blkg_conf_exit(&ctx);
+       return ret;
 }
 
 static u64 ioc_qos_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
@@ -3189,19 +3193,22 @@ static const match_table_t qos_tokens = {
 static ssize_t ioc_qos_write(struct kernfs_open_file *of, char *input,
                             size_t nbytes, loff_t off)
 {
-       struct block_device *bdev;
+       struct blkg_conf_ctx ctx;
        struct gendisk *disk;
        struct ioc *ioc;
        u32 qos[NR_QOS_PARAMS];
        bool enable, user;
-       char *p;
+       char *body, *p;
        int ret;
 
-       bdev = blkcg_conf_open_bdev(&input);
-       if (IS_ERR(bdev))
-               return PTR_ERR(bdev);
+       blkg_conf_init(&ctx, input);
 
-       disk = bdev->bd_disk;
+       ret = blkg_conf_open_bdev(&ctx);
+       if (ret)
+               goto err;
+
+       body = ctx.body;
+       disk = ctx.bdev->bd_disk;
        if (!queue_is_mq(disk->queue)) {
                ret = -EOPNOTSUPP;
                goto err;
@@ -3223,7 +3230,7 @@ static ssize_t ioc_qos_write(struct kernfs_open_file *of, char *input,
        enable = ioc->enabled;
        user = ioc->user_qos_params;
 
-       while ((p = strsep(&input, " \t\n"))) {
+       while ((p = strsep(&body, " \t\n"))) {
                substring_t args[MAX_OPT_ARGS];
                char buf[32];
                int tok;
@@ -3313,7 +3320,7 @@ static ssize_t ioc_qos_write(struct kernfs_open_file *of, char *input,
        blk_mq_unquiesce_queue(disk->queue);
        blk_mq_unfreeze_queue(disk->queue);
 
-       blkdev_put_no_open(bdev);
+       blkg_conf_exit(&ctx);
        return nbytes;
 einval:
        spin_unlock_irq(&ioc->lock);
@@ -3323,7 +3330,7 @@ einval:
 
        ret = -EINVAL;
 err:
-       blkdev_put_no_open(bdev);
+       blkg_conf_exit(&ctx);
        return ret;
 }
 
@@ -3376,19 +3383,22 @@ static const match_table_t i_lcoef_tokens = {
 static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input,
                                    size_t nbytes, loff_t off)
 {
-       struct block_device *bdev;
+       struct blkg_conf_ctx ctx;
        struct request_queue *q;
        struct ioc *ioc;
        u64 u[NR_I_LCOEFS];
        bool user;
-       char *p;
+       char *body, *p;
        int ret;
 
-       bdev = blkcg_conf_open_bdev(&input);
-       if (IS_ERR(bdev))
-               return PTR_ERR(bdev);
+       blkg_conf_init(&ctx, input);
+
+       ret = blkg_conf_open_bdev(&ctx);
+       if (ret)
+               goto err;
 
-       q = bdev_get_queue(bdev);
+       body = ctx.body;
+       q = bdev_get_queue(ctx.bdev);
        if (!queue_is_mq(q)) {
                ret = -EOPNOTSUPP;
                goto err;
@@ -3396,7 +3406,7 @@ static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input,
 
        ioc = q_to_ioc(q);
        if (!ioc) {
-               ret = blk_iocost_init(bdev->bd_disk);
+               ret = blk_iocost_init(ctx.bdev->bd_disk);
                if (ret)
                        goto err;
                ioc = q_to_ioc(q);
@@ -3409,7 +3419,7 @@ static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input,
        memcpy(u, ioc->params.i_lcoefs, sizeof(u));
        user = ioc->user_cost_model;
 
-       while ((p = strsep(&input, " \t\n"))) {
+       while ((p = strsep(&body, " \t\n"))) {
                substring_t args[MAX_OPT_ARGS];
                char buf[32];
                int tok;
@@ -3456,7 +3466,7 @@ static ssize_t ioc_cost_model_write(struct kernfs_open_file *of, char *input,
        blk_mq_unquiesce_queue(q);
        blk_mq_unfreeze_queue(q);
 
-       blkdev_put_no_open(bdev);
+       blkg_conf_exit(&ctx);
        return nbytes;
 
 einval:
@@ -3467,7 +3477,7 @@ einval:
 
        ret = -EINVAL;
 err:
-       blkdev_put_no_open(bdev);
+       blkg_conf_exit(&ctx);
        return ret;
 }