block: add internal hd part table references

We can't use krefs since it's apparently restricted to very basic
reference counting.

This reverts commit e4a683c8.

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 48209f5..011520d 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -381,10 +381,8 @@
 	put_device(part_to_dev(part));
 }
 
-void __delete_partition(struct kref *ref)
+void __delete_partition(struct hd_struct *part)
 {
-	struct hd_struct *part = container_of(ref, struct hd_struct, ref);
-
 	call_rcu(&part->rcu_head, delete_partition_rcu_cb);
 }
 
@@ -406,7 +404,7 @@
 	kobject_put(part->holder_dir);
 	device_del(part_to_dev(part));
 
-	kref_put(&part->ref, __delete_partition);
+	hd_struct_put(part);
 }
 
 static ssize_t whole_disk_show(struct device *dev,
@@ -505,7 +503,7 @@
 	if (!dev_get_uevent_suppress(ddev))
 		kobject_uevent(&pdev->kobj, KOBJ_ADD);
 
-	kref_init(&p->ref);
+	hd_ref_init(p);
 	return p;
 
 out_free_info: