From 7bc22014bb5182985ebdfeedc7cd6eec5ab5948c Mon Sep 17 00:00:00 2001 From: Daniel Lezcano Date: Tue, 11 Dec 2007 02:24:29 -0800 Subject: [PATCH] --- yaml --- r: 78393 b: refs/heads/master c: 853cbbaaa4ccdf221be5ab6afe967aa9998546b7 h: refs/heads/master i: 78391: 74ad21063cb2be1e0cf3ce77744df3254b28ca55 v: v3 --- [refs] | 2 +- trunk/include/net/transp_v6.h | 3 ++- trunk/net/ipv6/af_inet6.c | 8 ++++++-- trunk/net/ipv6/reassembly.c | 16 +++++++++++++--- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index ab347a0d44a3..c773bf773830 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 248b238dc960a42aa235057ba0a51a98ae2b0f0d +refs/heads/master: 853cbbaaa4ccdf221be5ab6afe967aa9998546b7 diff --git a/trunk/include/net/transp_v6.h b/trunk/include/net/transp_v6.h index 610b1bb775c9..aa9a4a6b99df 100644 --- a/trunk/include/net/transp_v6.h +++ b/trunk/include/net/transp_v6.h @@ -19,7 +19,8 @@ struct flowi; /* extention headers */ extern int ipv6_exthdrs_init(void); extern void ipv6_exthdrs_exit(void); -extern void ipv6_frag_init(void); +extern int ipv6_frag_init(void); +extern void ipv6_frag_exit(void); /* transport protocols */ extern void rawv6_init(void); diff --git a/trunk/net/ipv6/af_inet6.c b/trunk/net/ipv6/af_inet6.c index 442c298c1d7c..a75c4bc9281a 100644 --- a/trunk/net/ipv6/af_inet6.c +++ b/trunk/net/ipv6/af_inet6.c @@ -863,7 +863,9 @@ static int __init inet6_init(void) if (err) goto ipv6_exthdrs_fail; - ipv6_frag_init(); + err = ipv6_frag_init(); + if (err) + goto ipv6_frag_fail; /* Init v6 transport protocols. */ udpv6_init(); @@ -875,6 +877,8 @@ static int __init inet6_init(void) out: return err; +ipv6_frag_fail: + ipv6_exthdrs_exit(); ipv6_exthdrs_fail: addrconf_cleanup(); addrconf_fail: @@ -934,7 +938,7 @@ static void __exit inet6_exit(void) /* Cleanup code parts. */ ipv6_packet_cleanup(); - + ipv6_frag_exit(); ipv6_exthdrs_exit(); addrconf_cleanup(); ip6_flowlabel_cleanup(); diff --git a/trunk/net/ipv6/reassembly.c b/trunk/net/ipv6/reassembly.c index 76c88a93b9b5..bf4173daecbb 100644 --- a/trunk/net/ipv6/reassembly.c +++ b/trunk/net/ipv6/reassembly.c @@ -632,11 +632,13 @@ static struct inet6_protocol frag_protocol = .flags = INET6_PROTO_NOPOLICY, }; -void __init ipv6_frag_init(void) +int __init ipv6_frag_init(void) { - if (inet6_add_protocol(&frag_protocol, IPPROTO_FRAGMENT) < 0) - printk(KERN_ERR "ipv6_frag_init: Could not register protocol\n"); + int ret; + ret = inet6_add_protocol(&frag_protocol, IPPROTO_FRAGMENT); + if (ret) + goto out; ip6_frags.ctl = &ip6_frags_ctl; ip6_frags.hashfn = ip6_hashfn; ip6_frags.constructor = ip6_frag_init; @@ -646,4 +648,12 @@ void __init ipv6_frag_init(void) ip6_frags.match = ip6_frag_match; ip6_frags.frag_expire = ip6_frag_expire; inet_frags_init(&ip6_frags); +out: + return ret; +} + +void ipv6_frag_exit(void) +{ + inet_frags_fini(&ip6_frags); + inet6_del_protocol(&frag_protocol, IPPROTO_FRAGMENT); }