]> git.hungrycats.org Git - linux/commitdiff
driver model: Fix error handling in sysfs registration
authorPatrick Mochel <mochel@osdl.org>
Tue, 25 Mar 2003 09:14:01 +0000 (03:14 -0600)
committerPatrick Mochel <mochel@osdl.org>
Tue, 25 Mar 2003 09:14:01 +0000 (03:14 -0600)
From Matt Dobson:

The cpu, memblk, and node driver/device registration should be a little
more clean in the way it handles registration failures.  Or at least
*consistent* amongst the topology elements.  Right now, failures are
either silent, obscure, or leave things in an inconsistent state.

drivers/base/cpu.c
drivers/base/memblk.c
drivers/base/node.c

index f815ef26e8e7c7f299c0832d1b04969e15732657..30e7ab67e3588318f9d992a416685e3db4df21a3 100644 (file)
@@ -48,6 +48,9 @@ int __init register_cpu(struct cpu *cpu, int num, struct node *root)
 
 int __init cpu_dev_init(void)
 {
-       devclass_register(&cpu_devclass);
-       return driver_register(&cpu_driver);
+       int error;
+       if (!(error = devclass_register(&cpu_devclass)))
+               if (error = driver_register(&cpu_driver))
+                       devclass_unregister(&cpu_devclass);
+       return error;
 }
index a8f27d612fc4b057ba44fc6d4b4d4f9c4c56dc20..350078bd30b0fcb0152f7c512d0fc96af3da8ec1 100644 (file)
@@ -47,9 +47,12 @@ int __init register_memblk(struct memblk *memblk, int num, struct node *root)
 }
 
 
-static int __init register_memblk_type(void)
+int __init register_memblk_type(void)
 {
-       int error = devclass_register(&memblk_devclass);
-       return error ? error : driver_register(&memblk_driver);
+       int error;
+       if (!(error = devclass_register(&memblk_devclass)))
+               if (error = driver_register(&memblk_driver))
+                       devclass_unregister(&memblk_devclass);
+       return error;
 }
 postcore_initcall(register_memblk_type);
index 261bf881da60783d65eb3a75ba6edbd0962823c1..cfcf117018dc0f74bca613633926059a51e3995b 100644 (file)
@@ -89,9 +89,12 @@ int __init register_node(struct node *node, int num, struct node *parent)
 }
 
 
-static int __init register_node_type(void)
+int __init register_node_type(void)
 {
-       int error = devclass_register(&node_devclass);
-       return error ? error : driver_register(&node_driver);
+       int error;
+       if (!(error = devclass_register(&node_devclass)))
+               if (error = driver_register(&node_driver))
+                       devclass_unregister(&node_devclass);
+       return error;
 }
 postcore_initcall(register_node_type);