[PATCH] edac_mc: fix error handling

Call sysdev_class_unregister() on failure in edac_sysfs_memctrl_setup()
and decrease identation level for clear logic.

Acked-by: Doug Thompson <norsk5@xmission.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Akinobu Mita and committed by Linus Torvalds 77d6e139 7011774d

+29 -20
+29 -20
drivers/edac/edac_mc.c
··· 230 230 */ 231 231 static int edac_sysfs_memctrl_setup(void) 232 232 { 233 - int err=0; 233 + int err = 0; 234 234 235 235 debugf1("%s()\n", __func__); 236 236 237 237 /* create the /sys/devices/system/edac directory */ 238 238 err = sysdev_class_register(&edac_class); 239 239 240 - if (!err) { 241 - /* Init the MC's kobject */ 242 - memset(&edac_memctrl_kobj, 0, sizeof (edac_memctrl_kobj)); 243 - edac_memctrl_kobj.parent = &edac_class.kset.kobj; 244 - edac_memctrl_kobj.ktype = &ktype_memctrl; 245 - 246 - /* generate sysfs "..../edac/mc" */ 247 - err = kobject_set_name(&edac_memctrl_kobj,"mc"); 248 - 249 - if (!err) { 250 - /* FIXME: maybe new sysdev_create_subdir() */ 251 - err = kobject_register(&edac_memctrl_kobj); 252 - 253 - if (err) 254 - debugf1("Failed to register '.../edac/mc'\n"); 255 - else 256 - debugf1("Registered '.../edac/mc' kobject\n"); 257 - } 258 - } else 240 + if (err) { 259 241 debugf1("%s() error=%d\n", __func__, err); 242 + return err; 243 + } 260 244 245 + /* Init the MC's kobject */ 246 + memset(&edac_memctrl_kobj, 0, sizeof (edac_memctrl_kobj)); 247 + edac_memctrl_kobj.parent = &edac_class.kset.kobj; 248 + edac_memctrl_kobj.ktype = &ktype_memctrl; 249 + 250 + /* generate sysfs "..../edac/mc" */ 251 + err = kobject_set_name(&edac_memctrl_kobj,"mc"); 252 + 253 + if (err) 254 + goto fail; 255 + 256 + /* FIXME: maybe new sysdev_create_subdir() */ 257 + err = kobject_register(&edac_memctrl_kobj); 258 + 259 + if (err) { 260 + debugf1("Failed to register '.../edac/mc'\n"); 261 + goto fail; 262 + } 263 + 264 + debugf1("Registered '.../edac/mc' kobject\n"); 265 + 266 + return 0; 267 + 268 + fail: 269 + sysdev_class_unregister(&edac_class); 261 270 return err; 262 271 } 263 272