diff --git a/drivers/base/core.c b/drivers/base/core.c
index 1d8c7790b55a9b0fbdb91b2f452d749b48e51bbf..86d79755fbfb9d4c62c572df8d0585200d1064bf 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -39,7 +39,7 @@ dev_attr_show(struct kobject * kobj, struct attribute * attr, char * buf)
 	ssize_t ret = -EIO;
 
 	if (dev_attr->show)
-		ret = dev_attr->show(dev, buf);
+		ret = dev_attr->show(dev, dev_attr, buf);
 	return ret;
 }
 
@@ -52,7 +52,7 @@ dev_attr_store(struct kobject * kobj, struct attribute * attr,
 	ssize_t ret = -EIO;
 
 	if (dev_attr->store)
-		ret = dev_attr->store(dev, buf, count);
+		ret = dev_attr->store(dev, dev_attr, buf, count);
 	return ret;
 }
 
diff --git a/include/linux/device.h b/include/linux/device.h
index 91aac349b9a70115cf9adbcc4a9a30f2b766e4f4..7b781a72b2931ce05ed4fb49a6c83fe38c4d7f40 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -335,8 +335,10 @@ extern void driver_attach(struct device_driver * drv);
 
 struct device_attribute {
 	struct attribute	attr;
-	ssize_t (*show)(struct device * dev, char * buf);
-	ssize_t (*store)(struct device * dev, const char * buf, size_t count);
+	ssize_t (*show)(struct device *dev, struct device_attribute *attr,
+			char *buf);
+	ssize_t (*store)(struct device *dev, struct device_attribute *attr,
+			 const char *buf, size_t count);
 };
 
 #define DEVICE_ATTR(_name,_mode,_show,_store) \