block: add internal hd part table references
[firefly-linux-kernel-4.4.55.git] / fs / partitions / check.c
index bdf8d3cc95a4deeb89c5aab6a322f9824125862d..011520df71ae6722b70ae7a9dcf3006e36127b03 100644 (file)
@@ -381,6 +381,11 @@ static void delete_partition_rcu_cb(struct rcu_head *head)
        put_device(part_to_dev(part));
 }
 
+void __delete_partition(struct hd_struct *part)
+{
+       call_rcu(&part->rcu_head, delete_partition_rcu_cb);
+}
+
 void delete_partition(struct gendisk *disk, int partno)
 {
        struct disk_part_tbl *ptbl = disk->part_tbl;
@@ -399,7 +404,7 @@ void delete_partition(struct gendisk *disk, int partno)
        kobject_put(part->holder_dir);
        device_del(part_to_dev(part));
 
-       call_rcu(&part->rcu_head, delete_partition_rcu_cb);
+       hd_struct_put(part);
 }
 
 static ssize_t whole_disk_show(struct device *dev,
@@ -498,6 +503,7 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
        if (!dev_get_uevent_suppress(ddev))
                kobject_uevent(&pdev->kobj, KOBJ_ADD);
 
+       hd_ref_init(p);
        return p;
 
 out_free_info: