rk29: add define for cpufreq.h cru.h pmu.h
[firefly-linux-kernel-4.4.55.git] / block / genhd.c
index 5b76bf55d05c7b5b9bb9f0b269572d6b2eb5bc4b..cdd188b8ba3ce9a8abe1b8091c94e3fec7a01c14 100644 (file)
@@ -903,7 +903,7 @@ static struct attribute_group disk_attr_group = {
        .attrs = disk_attrs,
 };
 
-static struct attribute_group *disk_attr_groups[] = {
+static const struct attribute_group *disk_attr_groups[] = {
        &disk_attr_group,
        NULL
 };
@@ -994,16 +994,32 @@ static void disk_release(struct device *dev)
        free_part_stats(&disk->part0);
        kfree(disk);
 }
+
+static int disk_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+       struct gendisk *disk = dev_to_disk(dev);
+       struct disk_part_iter piter;
+       struct hd_struct *part;
+       int cnt = 0;
+
+       disk_part_iter_init(&piter, disk, 0);
+       while((part = disk_part_iter_next(&piter)))
+               cnt++;
+       disk_part_iter_exit(&piter);
+       add_uevent_var(env, "NPARTS=%u", cnt);
+       return 0;
+}
+
 struct class block_class = {
        .name           = "block",
 };
 
-static char *block_nodename(struct device *dev)
+static char *block_devnode(struct device *dev, mode_t *mode)
 {
        struct gendisk *disk = dev_to_disk(dev);
 
-       if (disk->nodename)
-               return disk->nodename(disk);
+       if (disk->devnode)
+               return disk->devnode(disk, mode);
        return NULL;
 }
 
@@ -1011,7 +1027,8 @@ static struct device_type disk_type = {
        .name           = "disk",
        .groups         = disk_attr_groups,
        .release        = disk_release,
-       .nodename       = block_nodename,
+       .devnode        = block_devnode,
+       .uevent         = disk_uevent,
 };
 
 #ifdef CONFIG_PROC_FS