[IPV6]: Make xfrm6_init to return an error code.
authorDaniel Lezcano <dlezcano@fr.ibm.com>
Fri, 7 Dec 2007 08:42:11 +0000 (00:42 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 22:56:45 +0000 (14:56 -0800)
The xfrm initialization function does not return any error code, so if
there is an error, the caller can not be advise of that.  This patch
checks the return code of the different called functions in order to
return a successful or failed initialization.

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/xfrm.h
net/ipv6/xfrm6_policy.c
net/ipv6/xfrm6_state.c

index 182f10b29d88111ffb3ab60495b1323fe43408c5..18260921eeb53610064868dd56244813e11407f5 100644 (file)
@@ -1066,11 +1066,11 @@ struct xfrm6_tunnel {
 
 extern void xfrm_init(void);
 extern void xfrm4_init(void);
-extern void xfrm6_init(void);
+extern int xfrm6_init(void);
 extern void xfrm6_fini(void);
 extern void xfrm_state_init(void);
 extern void xfrm4_state_init(void);
-extern void xfrm6_state_init(void);
+extern int xfrm6_state_init(void);
 extern void xfrm6_state_fini(void);
 
 extern int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*), void *);
index 4d54951cea0855af046506b8356a5cd167e9af59..181cf91538f1c16ae4db7cccaa1e77b5cd85848d 100644 (file)
@@ -269,9 +269,9 @@ static struct xfrm_policy_afinfo xfrm6_policy_afinfo = {
        .fill_dst =             xfrm6_fill_dst,
 };
 
-static void __init xfrm6_policy_init(void)
+static int __init xfrm6_policy_init(void)
 {
-       xfrm_policy_register_afinfo(&xfrm6_policy_afinfo);
+       return xfrm_policy_register_afinfo(&xfrm6_policy_afinfo);
 }
 
 static void xfrm6_policy_fini(void)
@@ -279,10 +279,22 @@ static void xfrm6_policy_fini(void)
        xfrm_policy_unregister_afinfo(&xfrm6_policy_afinfo);
 }
 
-void __init xfrm6_init(void)
+int __init xfrm6_init(void)
 {
-       xfrm6_policy_init();
-       xfrm6_state_init();
+       int ret;
+
+       ret = xfrm6_policy_init();
+       if (ret)
+               goto out;
+
+       ret = xfrm6_state_init();
+       if (ret)
+               goto out_policy;
+out:
+       return ret;
+out_policy:
+       xfrm6_policy_fini();
+       goto out;
 }
 
 void xfrm6_fini(void)
index a7a7e8fd6a331ca513bd627b0ed9721031bef18a..dc817e035e2338cb60fa78ec2e0cf9319eef986d 100644 (file)
@@ -198,9 +198,9 @@ static struct xfrm_state_afinfo xfrm6_state_afinfo = {
        .transport_finish       = xfrm6_transport_finish,
 };
 
-void __init xfrm6_state_init(void)
+int __init xfrm6_state_init(void)
 {
-       xfrm_state_register_afinfo(&xfrm6_state_afinfo);
+       return xfrm_state_register_afinfo(&xfrm6_state_afinfo);
 }
 
 void xfrm6_state_fini(void)