Ver Fonte

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>
Dmitry Torokhov há 18 anos atrás
pai
commit
2fd5a15489
2 ficheiros alterados com 11 adições e 7 exclusões
  1. 6 3
      drivers/video/backlight/backlight.c
  2. 5 4
      drivers/video/backlight/lcd.c

+ 6 - 3
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,

+ 5 - 4
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,