summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@mail.ru>2007-02-07 22:25:50 +0000
committerRichard Purdie <rpurdie@rpsys.net>2007-02-20 08:35:09 +0000
commit2fd5a15489dd2e58009ffd4ecbadb36a40f67d2b (patch)
tree4f7406a6efbe9219f5bf78e3f112e67573efa0aa
parent7a208463b20e893e8e2074b2d41b8dc09568ddee (diff)
downloadkernel-crypto-2fd5a15489dd2e58009ffd4ecbadb36a40f67d2b.tar.gz
kernel-crypto-2fd5a15489dd2e58009ffd4ecbadb36a40f67d2b.tar.xz
kernel-crypto-2fd5a15489dd2e58009ffd4ecbadb36a40f67d2b.zip
backlight: Fix error handling
Fix error handling when registering new device Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
-rw-r--r--drivers/video/backlight/backlight.c9
-rw-r--r--drivers/video/backlight/lcd.c9
2 files changed, 11 insertions, 7 deletions
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 9601bfe309a..71056f8b621 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -240,13 +240,16 @@ struct backlight_device *backlight_device_register(const char *name,
rc = class_device_register(&new_bd->class_dev);
if (unlikely(rc)) {
-error: kfree(new_bd);
+ kfree(new_bd);
return ERR_PTR(rc);
}
rc = backlight_register_fb(new_bd);
- if (unlikely(rc))
- goto error;
+ if (rc) {
+ class_device_unregister(&new_bd->class_dev);
+ return ERR_PTR(rc);
+ }
+
for (i = 0; i < ARRAY_SIZE(bl_class_device_attributes); i++) {
rc = class_device_create_file(&new_bd->class_dev,
diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
index f6e041627ed..f95f0e33101 100644
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -206,14 +206,15 @@ struct lcd_device *lcd_device_register(const char *name, void *devdata,
rc = class_device_register(&new_ld->class_dev);
if (unlikely(rc)) {
-error: kfree(new_ld);
+ kfree(new_ld);
return ERR_PTR(rc);
}
rc = lcd_register_fb(new_ld);
-
- if (unlikely(rc))
- goto error;
+ if (rc) {
+ class_device_unregister(&new_ld->class_dev);
+ return ERR_PTR(rc);
+ }
for (i = 0; i < ARRAY_SIZE(lcd_class_device_attributes); i++) {
rc = class_device_create_file(&new_ld->class_dev,