mirror of https://github.com/torvalds/linux.git
If asus_acpi_init doesn't find any device it knows about, it mistakenly returns a "success" error code even though it cleans up after itself. Later when trying to rmmod asus_acpi, the module_exit routine would try to clean up one more time and we would end up calling acpi_bus_unregister_driver(&asus_hotk_driver) twice. This patch addresses this first problem by returning -ENODEV when no appropriate device is found. Then there was also another bug with the code handling the return value of backlight_device_register. If this function ever failed, the driver would cleanup by calling the module_exit routine from module_init, but it would still return "success". So any attempt to rmmod this module would result in asus_acpi_exit being called twice but it's not ready to handle it (I haven't hit this bug, just found it by code inspection). This patch fixes that by inserting a return -ENODEV; at the end of this error handling path. Signed-off-by: Maxime Austruy <maxime@tralhalla.org> Cc: Len Brown <lenb@kernel.org> Cc: Richard Purdie <rpurdie@rpsys.net> Cc: Jan Engelhardt <jengelh@computergmbh.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
|---|---|---|
| .. | ||
| dispatcher | ||
| events | ||
| executer | ||
| hardware | ||
| namespace | ||
| parser | ||
| resources | ||
| sleep | ||
| tables | ||
| utilities | ||
| Kconfig | ||
| Makefile | ||
| ac.c | ||
| acpi_memhotplug.c | ||
| asus_acpi.c | ||
| battery.c | ||
| bay.c | ||
| blacklist.c | ||
| bus.c | ||
| button.c | ||
| cm_sbs.c | ||
| container.c | ||
| debug.c | ||
| dock.c | ||
| ec.c | ||
| event.c | ||
| fan.c | ||
| glue.c | ||
| numa.c | ||
| osl.c | ||
| pci_bind.c | ||
| pci_irq.c | ||
| pci_link.c | ||
| pci_root.c | ||
| power.c | ||
| processor_core.c | ||
| processor_idle.c | ||
| processor_perflib.c | ||
| processor_thermal.c | ||
| processor_throttling.c | ||
| sbs.c | ||
| scan.c | ||
| system.c | ||
| tables.c | ||
| thermal.c | ||
| toshiba_acpi.c | ||
| utils.c | ||
| video.c | ||