diff options
author | Daniel Lezcano <dlezcano@fr.ibm.com> | 2007-12-11 02:25:35 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 14:57:13 -0800 |
commit | 7f4e4868f3ce0e946f116c28fa4fe033be5e4ba9 (patch) | |
tree | 144add1d4c94a145f7e048a17d91b563f5e6e265 /net/ipv6/udplite.c | |
parent | 87c3efbfdd1f98af14a1f60ff19f73d9a8d8da98 (diff) | |
download | linux-7f4e4868f3ce0e946f116c28fa4fe033be5e4ba9.tar.gz linux-7f4e4868f3ce0e946f116c28fa4fe033be5e4ba9.tar.bz2 linux-7f4e4868f3ce0e946f116c28fa4fe033be5e4ba9.zip |
[IPV6]: make the protocol initialization to return an error code
This patchset makes the different protocols to return an error code, so
the af_inet6 module can check the initialization was correct or not.
The raw6 was taken into account to be consistent with the rest of the
protocols, but the registration is at the same place.
Because the raw6 has its own init function, the proto and the ops structure
can be moved inside the raw6.c file.
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/udplite.c')
-rw-r--r-- | net/ipv6/udplite.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c index 5a0379f71415..f20b376689fb 100644 --- a/net/ipv6/udplite.c +++ b/net/ipv6/udplite.c @@ -77,12 +77,29 @@ static struct inet_protosw udplite6_protosw = { .flags = INET_PROTOSW_PERMANENT, }; -void __init udplitev6_init(void) +int __init udplitev6_init(void) { - if (inet6_add_protocol(&udplitev6_protocol, IPPROTO_UDPLITE) < 0) - printk(KERN_ERR "%s: Could not register.\n", __FUNCTION__); + int ret; - inet6_register_protosw(&udplite6_protosw); + ret = inet6_add_protocol(&udplitev6_protocol, IPPROTO_UDPLITE); + if (ret) + goto out; + + ret = inet6_register_protosw(&udplite6_protosw); + if (ret) + goto out_udplitev6_protocol; +out: + return ret; + +out_udplitev6_protocol: + inet6_del_protocol(&udplitev6_protocol, IPPROTO_UDPLITE); + goto out; +} + +void __exit udplitev6_exit(void) +{ + inet6_unregister_protosw(&udplite6_protosw); + inet6_del_protocol(&udplitev6_protocol, IPPROTO_UDPLITE); } #ifdef CONFIG_PROC_FS |