summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
Diffstat (limited to 'block')
-rw-r--r--block/genhd.c6
-rw-r--r--block/partition-generic.c9
2 files changed, 10 insertions, 5 deletions
diff --git a/block/genhd.c b/block/genhd.c
index 85df45292dba..0c706f33a599 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -1284,7 +1284,11 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
1284 * converted to make use of bd_mutex and sequence counters. 1284 * converted to make use of bd_mutex and sequence counters.
1285 */ 1285 */
1286 seqcount_init(&disk->part0.nr_sects_seq); 1286 seqcount_init(&disk->part0.nr_sects_seq);
1287 hd_ref_init(&disk->part0); 1287 if (hd_ref_init(&disk->part0)) {
1288 hd_free_part(&disk->part0);
1289 kfree(disk);
1290 return NULL;
1291 }
1288 1292
1289 disk->minors = minors; 1293 disk->minors = minors;
1290 rand_initialize_disk(disk); 1294 rand_initialize_disk(disk);
diff --git a/block/partition-generic.c b/block/partition-generic.c
index eca0d02a607c..e7711133284e 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -232,8 +232,9 @@ static void delete_partition_rcu_cb(struct rcu_head *head)
232 put_device(part_to_dev(part)); 232 put_device(part_to_dev(part));
233} 233}
234 234
235void __delete_partition(struct hd_struct *part) 235void __delete_partition(struct percpu_ref *ref)
236{ 236{
237 struct hd_struct *part = container_of(ref, struct hd_struct, ref);
237 call_rcu(&part->rcu_head, delete_partition_rcu_cb); 238 call_rcu(&part->rcu_head, delete_partition_rcu_cb);
238} 239}
239 240
@@ -254,7 +255,7 @@ void delete_partition(struct gendisk *disk, int partno)
254 kobject_put(part->holder_dir); 255 kobject_put(part->holder_dir);
255 device_del(part_to_dev(part)); 256 device_del(part_to_dev(part));
256 257
257 hd_struct_put(part); 258 hd_struct_kill(part);
258} 259}
259 260
260static ssize_t whole_disk_show(struct device *dev, 261static ssize_t whole_disk_show(struct device *dev,
@@ -355,8 +356,8 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
355 if (!dev_get_uevent_suppress(ddev)) 356 if (!dev_get_uevent_suppress(ddev))
356 kobject_uevent(&pdev->kobj, KOBJ_ADD); 357 kobject_uevent(&pdev->kobj, KOBJ_ADD);
357 358
358 hd_ref_init(p); 359 if (!hd_ref_init(p))
359 return p; 360 return p;
360 361
361out_free_info: 362out_free_info:
362 free_part_info(p); 363 free_part_info(p);