diff options
-rw-r--r-- | drivers/staging/speakup/kobjects.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c index e12b0e7c0ad6..cc79f9edfe9e 100644 --- a/drivers/staging/speakup/kobjects.c +++ b/drivers/staging/speakup/kobjects.c | |||
@@ -989,24 +989,34 @@ int speakup_kobj_init(void) | |||
989 | 989 | ||
990 | speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj); | 990 | speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj); |
991 | if (!speakup_kobj) { | 991 | if (!speakup_kobj) { |
992 | kobject_put(accessibility_kobj); | 992 | retval = -ENOMEM; |
993 | return -ENOMEM; | 993 | goto err_acc; |
994 | } | 994 | } |
995 | 995 | ||
996 | /* Create the files associated with this kobject */ | 996 | /* Create the files associated with this kobject */ |
997 | retval = sysfs_create_group(speakup_kobj, &main_attr_group); | 997 | retval = sysfs_create_group(speakup_kobj, &main_attr_group); |
998 | if (retval) | 998 | if (retval) |
999 | speakup_kobj_exit(); | 999 | goto err_speakup; |
1000 | 1000 | ||
1001 | retval = sysfs_create_group(speakup_kobj, &i18n_attr_group); | 1001 | retval = sysfs_create_group(speakup_kobj, &i18n_attr_group); |
1002 | if (retval) | 1002 | if (retval) |
1003 | speakup_kobj_exit(); | 1003 | goto err_group; |
1004 | |||
1005 | return 0; | ||
1004 | 1006 | ||
1007 | err_group: | ||
1008 | sysfs_remove_group(speakup_kobj, &main_attr_group); | ||
1009 | err_speakup: | ||
1010 | kobject_put(speakup_kobj); | ||
1011 | err_acc: | ||
1012 | kobject_put(accessibility_kobj); | ||
1005 | return retval; | 1013 | return retval; |
1006 | } | 1014 | } |
1007 | 1015 | ||
1008 | void speakup_kobj_exit(void) | 1016 | void speakup_kobj_exit(void) |
1009 | { | 1017 | { |
1018 | sysfs_remove_group(speakup_kobj, &i18n_attr_group); | ||
1019 | sysfs_remove_group(speakup_kobj, &main_attr_group); | ||
1010 | kobject_put(speakup_kobj); | 1020 | kobject_put(speakup_kobj); |
1011 | kobject_put(accessibility_kobj); | 1021 | kobject_put(accessibility_kobj); |
1012 | } | 1022 | } |