diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index f7051374894774b2b1c81974ee8bb59ea4d7e685..b5bf243d9cd6a26afc47eabb2990cf2d4cf13884 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -86,8 +86,12 @@ static void driver_sysfs_remove(struct device *dev)
  */
 int device_bind_driver(struct device *dev)
 {
-	driver_bound(dev);
-	return driver_sysfs_add(dev);
+	int ret;
+
+	ret = driver_sysfs_add(dev);
+	if (!ret)
+		driver_bound(dev);
+	return ret;
 }
 
 struct stupid_thread_structure {