arcnet: Remove unnecessary OOM messages
[cascardo/linux.git] / block / partition-generic.c
index 0d9e5f9..e771113 100644 (file)
@@ -212,8 +212,7 @@ static void part_release(struct device *dev)
 {
        struct hd_struct *p = dev_to_part(dev);
        blk_free_devt(dev->devt);
-       free_part_stats(p);
-       free_part_info(p);
+       hd_free_part(p);
        kfree(p);
 }
 
@@ -233,8 +232,9 @@ static void delete_partition_rcu_cb(struct rcu_head *head)
        put_device(part_to_dev(part));
 }
 
-void __delete_partition(struct hd_struct *part)
+void __delete_partition(struct percpu_ref *ref)
 {
+       struct hd_struct *part = container_of(ref, struct hd_struct, ref);
        call_rcu(&part->rcu_head, delete_partition_rcu_cb);
 }
 
@@ -255,7 +255,7 @@ void delete_partition(struct gendisk *disk, int partno)
        kobject_put(part->holder_dir);
        device_del(part_to_dev(part));
 
-       hd_struct_put(part);
+       hd_struct_kill(part);
 }
 
 static ssize_t whole_disk_show(struct device *dev,
@@ -356,8 +356,8 @@ 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;
+       if (!hd_ref_init(p))
+               return p;
 
 out_free_info:
        free_part_info(p);