[IPV6]: Make fib6_init to return an error code.
authorDaniel Lezcano <dlezcano@fr.ibm.com>
Fri, 7 Dec 2007 08:40:34 +0000 (00:40 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 22:56:45 +0000 (14:56 -0800)
If there is an error in the initialization function, nothing is
followed up to the caller. So I add a return value to be set for the
init function.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Acked-by: Benjamin Thery <benjamin.thery@bull.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip6_fib.h
net/ipv6/ip6_fib.c

index 4cefcffe773e29d88b0e6284e998f5424b4ffd67..5d39ce92afcf3699f9ca28e5c91e19050d165fc9 100644 (file)
@@ -224,7 +224,7 @@ extern void                 fib6_run_gc(unsigned long dummy);
 
 extern void                    fib6_gc_cleanup(void);
 
-extern void                    fib6_init(void);
+extern int                     fib6_init(void);
 
 extern void                    fib6_rules_init(void);
 extern void                    fib6_rules_cleanup(void);
index 31b60a02512a7ec16dd08710b805a4fd7913f0fc..c100b44f2b87cc64b48c9bdb36b25b2fcf73e05c 100644 (file)
@@ -1473,16 +1473,24 @@ void fib6_run_gc(unsigned long dummy)
        spin_unlock_bh(&fib6_gc_lock);
 }
 
-void __init fib6_init(void)
+int __init fib6_init(void)
 {
+       int ret;
        fib6_node_kmem = kmem_cache_create("fib6_nodes",
                                           sizeof(struct fib6_node),
                                           0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
                                           NULL);
-
        fib6_tables_init();
 
-       __rtnl_register(PF_INET6, RTM_GETROUTE, NULL, inet6_dump_fib);
+       ret = __rtnl_register(PF_INET6, RTM_GETROUTE, NULL, inet6_dump_fib);
+       if (ret)
+               goto out_kmem_cache_create;
+out:
+       return ret;
+
+out_kmem_cache_create:
+       kmem_cache_destroy(fib6_node_kmem);
+       goto out;
 }
 
 void fib6_gc_cleanup(void)