aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/speakup/kobjects.c18
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
1007err_group:
1008 sysfs_remove_group(speakup_kobj, &main_attr_group);
1009err_speakup:
1010 kobject_put(speakup_kobj);
1011err_acc:
1012 kobject_put(accessibility_kobj);
1005 return retval; 1013 return retval;
1006} 1014}
1007 1015
1008void speakup_kobj_exit(void) 1016void 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}