speakup_kobj_init() and speakup_kobj_exit() didn't remove i18n_attr_group and main_attr_group sysfs groups. Signed-off-by: Vasiliy Kulikov <segooon@xxxxxxxxx> --- 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 e12b0e7..cc79f9e 100644 --- a/drivers/staging/speakup/kobjects.c +++ b/drivers/staging/speakup/kobjects.c @@ -989,24 +989,34 @@ int speakup_kobj_init(void) speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj); if (!speakup_kobj) { - kobject_put(accessibility_kobj); - return -ENOMEM; + retval = -ENOMEM; + goto err_acc; } /* Create the files associated with this kobject */ retval = sysfs_create_group(speakup_kobj, &main_attr_group); if (retval) - speakup_kobj_exit(); + goto err_speakup; retval = sysfs_create_group(speakup_kobj, &i18n_attr_group); if (retval) - speakup_kobj_exit(); + goto err_group; + + return 0; +err_group: + sysfs_remove_group(speakup_kobj, &main_attr_group); +err_speakup: + kobject_put(speakup_kobj); +err_acc: + kobject_put(accessibility_kobj); return retval; } void speakup_kobj_exit(void) { + sysfs_remove_group(speakup_kobj, &i18n_attr_group); + sysfs_remove_group(speakup_kobj, &main_attr_group); kobject_put(speakup_kobj); kobject_put(accessibility_kobj); } -- 1.7.0.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel