| From foo@baz Mon Sep 17 13:33:56 CEST 2018 |
| From: Stephen Hemminger <stephen@networkplumber.org> |
| Date: Thu, 13 Sep 2018 07:58:37 -0700 |
| Subject: inet: frags: refactor ipv6_frag_init() |
| To: davem@davemloft.net, gregkh@linuxfoundation.org |
| Cc: netdev@vger.kernel.org, stable@vger.kernel.org, edumazet@google.com |
| Message-ID: <20180913145902.17531-6-sthemmin@microsoft.com> |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| We want to call inet_frags_init() earlier. |
| |
| This is a prereq to "inet: frags: use rhashtables for reassembly units" |
| |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| (cherry picked from commit 5b975bab23615cd0fdf67af6c9298eb01c4b9f61) |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/reassembly.c | 25 ++++++++++++++----------- |
| 1 file changed, 14 insertions(+), 11 deletions(-) |
| |
| --- a/net/ipv6/reassembly.c |
| +++ b/net/ipv6/reassembly.c |
| @@ -746,10 +746,21 @@ int __init ipv6_frag_init(void) |
| { |
| int ret; |
| |
| - ret = inet6_add_protocol(&frag_protocol, IPPROTO_FRAGMENT); |
| + ip6_frags.hashfn = ip6_hashfn; |
| + ip6_frags.constructor = ip6_frag_init; |
| + ip6_frags.destructor = NULL; |
| + ip6_frags.qsize = sizeof(struct frag_queue); |
| + ip6_frags.match = ip6_frag_match; |
| + ip6_frags.frag_expire = ip6_frag_expire; |
| + ip6_frags.frags_cache_name = ip6_frag_cache_name; |
| + ret = inet_frags_init(&ip6_frags); |
| if (ret) |
| goto out; |
| |
| + ret = inet6_add_protocol(&frag_protocol, IPPROTO_FRAGMENT); |
| + if (ret) |
| + goto err_protocol; |
| + |
| ret = ip6_frags_sysctl_register(); |
| if (ret) |
| goto err_sysctl; |
| @@ -758,16 +769,6 @@ int __init ipv6_frag_init(void) |
| if (ret) |
| goto err_pernet; |
| |
| - ip6_frags.hashfn = ip6_hashfn; |
| - ip6_frags.constructor = ip6_frag_init; |
| - ip6_frags.destructor = NULL; |
| - ip6_frags.qsize = sizeof(struct frag_queue); |
| - ip6_frags.match = ip6_frag_match; |
| - ip6_frags.frag_expire = ip6_frag_expire; |
| - ip6_frags.frags_cache_name = ip6_frag_cache_name; |
| - ret = inet_frags_init(&ip6_frags); |
| - if (ret) |
| - goto err_pernet; |
| out: |
| return ret; |
| |
| @@ -775,6 +776,8 @@ err_pernet: |
| ip6_frags_sysctl_unregister(); |
| err_sysctl: |
| inet6_del_protocol(&frag_protocol, IPPROTO_FRAGMENT); |
| +err_protocol: |
| + inet_frags_fini(&ip6_frags); |
| goto out; |
| } |
| |