Merge tag 'devicetree-fixes-for-5.11-1' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / block / blk-cgroup.c
index 54fbe1e..031114d 100644 (file)
@@ -556,22 +556,22 @@ static struct blkcg_gq *blkg_lookup_check(struct blkcg *blkcg,
 }
 
 /**
- * blkg_conf_prep - parse and prepare for per-blkg config update
+ * blkcg_conf_open_bdev - parse and open bdev for per-blkg config update
  * @inputp: input string pointer
  *
  * Parse the device node prefix part, MAJ:MIN, of per-blkg config update
- * from @input and get and return the matching gendisk.  *@inputp is
+ * from @input and get and return the matching bdev.  *@inputp is
  * updated to point past the device node prefix.  Returns an ERR_PTR()
  * value on error.
  *
  * Use this function iff blkg_conf_prep() can't be used for some reason.
  */
-struct gendisk *blkcg_conf_get_disk(char **inputp)
+struct block_device *blkcg_conf_open_bdev(char **inputp)
 {
        char *input = *inputp;
        unsigned int major, minor;
-       struct gendisk *disk;
-       int key_len, part;
+       struct block_device *bdev;
+       int key_len;
 
        if (sscanf(input, "%u:%u%n", &major, &minor, &key_len) != 2)
                return ERR_PTR(-EINVAL);
@@ -581,16 +581,16 @@ struct gendisk *blkcg_conf_get_disk(char **inputp)
                return ERR_PTR(-EINVAL);
        input = skip_spaces(input);
 
-       disk = get_gendisk(MKDEV(major, minor), &part);
-       if (!disk)
+       bdev = blkdev_get_no_open(MKDEV(major, minor));
+       if (!bdev)
                return ERR_PTR(-ENODEV);
-       if (part) {
-               put_disk_and_module(disk);
+       if (bdev_is_partition(bdev)) {
+               blkdev_put_no_open(bdev);
                return ERR_PTR(-ENODEV);
        }
 
        *inputp = input;
-       return disk;
+       return bdev;
 }
 
 /**
@@ -607,18 +607,18 @@ struct gendisk *blkcg_conf_get_disk(char **inputp)
  */
 int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol,
                   char *input, struct blkg_conf_ctx *ctx)
-       __acquires(rcu) __acquires(&disk->queue->queue_lock)
+       __acquires(rcu) __acquires(&bdev->bd_disk->queue->queue_lock)
 {
-       struct gendisk *disk;
+       struct block_device *bdev;
        struct request_queue *q;
        struct blkcg_gq *blkg;
        int ret;
 
-       disk = blkcg_conf_get_disk(&input);
-       if (IS_ERR(disk))
-               return PTR_ERR(disk);
+       bdev = blkcg_conf_open_bdev(&input);
+       if (IS_ERR(bdev))
+               return PTR_ERR(bdev);
 
-       q = disk->queue;
+       q = bdev->bd_disk->queue;
 
        rcu_read_lock();
        spin_lock_irq(&q->queue_lock);
@@ -689,7 +689,7 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol,
                        goto success;
        }
 success:
-       ctx->disk = disk;
+       ctx->bdev = bdev;
        ctx->blkg = blkg;
        ctx->body = input;
        return 0;
@@ -700,7 +700,7 @@ fail_unlock:
        spin_unlock_irq(&q->queue_lock);
        rcu_read_unlock();
 fail:
-       put_disk_and_module(disk);
+       blkdev_put_no_open(bdev);
        /*
         * If queue was bypassing, we should retry.  Do so after a
         * short msleep().  It isn't strictly necessary but queue
@@ -723,11 +723,11 @@ EXPORT_SYMBOL_GPL(blkg_conf_prep);
  * with blkg_conf_prep().
  */
 void blkg_conf_finish(struct blkg_conf_ctx *ctx)
-       __releases(&ctx->disk->queue->queue_lock) __releases(rcu)
+       __releases(&ctx->bdev->bd_disk->queue->queue_lock) __releases(rcu)
 {
-       spin_unlock_irq(&ctx->disk->queue->queue_lock);
+       spin_unlock_irq(&ctx->bdev->bd_disk->queue->queue_lock);
        rcu_read_unlock();
-       put_disk_and_module(ctx->disk);
+       blkdev_put_no_open(ctx->bdev);
 }
 EXPORT_SYMBOL_GPL(blkg_conf_finish);
 
@@ -820,9 +820,9 @@ static void blkcg_fill_root_iostats(void)
 
        class_dev_iter_init(&iter, &block_class, NULL, &disk_type);
        while ((dev = class_dev_iter_next(&iter))) {
-               struct gendisk *disk = dev_to_disk(dev);
-               struct hd_struct *part = disk_get_part(disk, 0);
-               struct blkcg_gq *blkg = blk_queue_root_blkg(disk->queue);
+               struct block_device *bdev = dev_to_bdev(dev);
+               struct blkcg_gq *blkg =
+                       blk_queue_root_blkg(bdev->bd_disk->queue);
                struct blkg_iostat tmp;
                int cpu;
 
@@ -830,7 +830,7 @@ static void blkcg_fill_root_iostats(void)
                for_each_possible_cpu(cpu) {
                        struct disk_stats *cpu_dkstats;
 
-                       cpu_dkstats = per_cpu_ptr(part->dkstats, cpu);
+                       cpu_dkstats = per_cpu_ptr(bdev->bd_stats, cpu);
                        tmp.ios[BLKG_IOSTAT_READ] +=
                                cpu_dkstats->ios[STAT_READ];
                        tmp.ios[BLKG_IOSTAT_WRITE] +=
@@ -849,7 +849,6 @@ static void blkcg_fill_root_iostats(void)
                        blkg_iostat_set(&blkg->iostat.cur, &tmp);
                        u64_stats_update_end(&blkg->iostat.sync);
                }
-               disk_put_part(part);
        }
 }