diff options
Diffstat (limited to 'drivers/base/bus.c')
| -rw-r--r-- | drivers/base/bus.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 973bf2ad4e0..63c143e54a5 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
| @@ -689,15 +689,19 @@ int bus_add_driver(struct device_driver *drv) | |||
| 689 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", | 689 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", |
| 690 | __func__, drv->name); | 690 | __func__, drv->name); |
| 691 | } | 691 | } |
| 692 | error = add_bind_files(drv); | 692 | |
| 693 | if (error) { | 693 | if (!drv->suppress_bind_attrs) { |
| 694 | /* Ditto */ | 694 | error = add_bind_files(drv); |
| 695 | printk(KERN_ERR "%s: add_bind_files(%s) failed\n", | 695 | if (error) { |
| 696 | __func__, drv->name); | 696 | /* Ditto */ |
| 697 | printk(KERN_ERR "%s: add_bind_files(%s) failed\n", | ||
| 698 | __func__, drv->name); | ||
| 699 | } | ||
| 697 | } | 700 | } |
| 698 | 701 | ||
| 699 | kobject_uevent(&priv->kobj, KOBJ_ADD); | 702 | kobject_uevent(&priv->kobj, KOBJ_ADD); |
| 700 | return 0; | 703 | return 0; |
| 704 | |||
| 701 | out_unregister: | 705 | out_unregister: |
| 702 | kfree(drv->p); | 706 | kfree(drv->p); |
| 703 | drv->p = NULL; | 707 | drv->p = NULL; |
| @@ -720,7 +724,8 @@ void bus_remove_driver(struct device_driver *drv) | |||
| 720 | if (!drv->bus) | 724 | if (!drv->bus) |
| 721 | return; | 725 | return; |
| 722 | 726 | ||
| 723 | remove_bind_files(drv); | 727 | if (!drv->suppress_bind_attrs) |
| 728 | remove_bind_files(drv); | ||
| 724 | driver_remove_attrs(drv->bus, drv); | 729 | driver_remove_attrs(drv->bus, drv); |
| 725 | driver_remove_file(drv, &driver_attr_uevent); | 730 | driver_remove_file(drv, &driver_attr_uevent); |
| 726 | klist_remove(&drv->p->knode_bus); | 731 | klist_remove(&drv->p->knode_bus); |
