driver-core: Move kobj_to_dev from genhd.h to device.h

Author: Lars-Peter Clausen <>

This function is not really specific to the genhd layer and there are various
re-implementations or open-coded variants of it all throughout the kernel. To
avoid further duplications move the function to a more generic place.

While moving also convert it from a macro to a inline function.

Potential users of this function can be detected and converted using the
following coccinelle patch:

expression k;
-container_of(k, struct device, kobj)

Signed-off-by: Lars-Peter Clausen 
Signed-off-by: Greg Kroah-Hartman 
 include/linux/device.h | 5 +++++
 include/linux/genhd.h  | 1 -
 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/include/linux/device.h b/include/linux/device.h
index 161d962..5c4495c 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -689,6 +689,11 @@ struct device {
 	void	(*release)(struct device *dev);
+static inline struct device *kobj_to_dev(struct kobject *kobj)
+	return container_of(kobj, struct device, kobj);
 /* Get the wakeup routines, which depend on struct device */
 #include <linux/pm_wakeup.h>
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 017a7fb..ae0aaa9 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -16,7 +16,6 @@
-#define kobj_to_dev(k)		container_of((k), struct device, kobj)
 #define dev_to_disk(device)	container_of((device), struct gendisk, part0.__dev)
 #define dev_to_part(device)	container_of((device), struct hd_struct, __dev)
 #define disk_to_dev(disk)	(&(disk)->part0.__dev)