diff options
Diffstat (limited to 'net/ipv6/ipv6_sockglue.c')
| -rw-r--r-- | net/ipv6/ipv6_sockglue.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 3bc144a79fa5..76466af8331e 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | 55 | ||
| 56 | #include <asm/uaccess.h> | 56 | #include <asm/uaccess.h> |
| 57 | 57 | ||
| 58 | DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics); | 58 | DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics) __read_mostly; |
| 59 | 59 | ||
| 60 | static struct packet_type ipv6_packet_type = { | 60 | static struct packet_type ipv6_packet_type = { |
| 61 | .type = __constant_htons(ETH_P_IPV6), | 61 | .type = __constant_htons(ETH_P_IPV6), |
| @@ -109,13 +109,6 @@ int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *)) | |||
| 109 | return 0; | 109 | return 0; |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | extern int ip6_mc_source(int add, int omode, struct sock *sk, | ||
| 113 | struct group_source_req *pgsr); | ||
| 114 | extern int ip6_mc_msfilter(struct sock *sk, struct group_filter *gsf); | ||
| 115 | extern int ip6_mc_msfget(struct sock *sk, struct group_filter *gsf, | ||
| 116 | struct group_filter __user *optval, int __user *optlen); | ||
| 117 | |||
| 118 | |||
| 119 | int ipv6_setsockopt(struct sock *sk, int level, int optname, | 112 | int ipv6_setsockopt(struct sock *sk, int level, int optname, |
| 120 | char __user *optval, int optlen) | 113 | char __user *optval, int optlen) |
| 121 | { | 114 | { |
| @@ -163,6 +156,13 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
| 163 | fl6_free_socklist(sk); | 156 | fl6_free_socklist(sk); |
| 164 | ipv6_sock_mc_close(sk); | 157 | ipv6_sock_mc_close(sk); |
| 165 | 158 | ||
| 159 | /* | ||
| 160 | * Sock is moving from IPv6 to IPv4 (sk_prot), so | ||
| 161 | * remove it from the refcnt debug socks count in the | ||
| 162 | * original family... | ||
| 163 | */ | ||
| 164 | sk_refcnt_debug_dec(sk); | ||
| 165 | |||
| 166 | if (sk->sk_protocol == IPPROTO_TCP) { | 166 | if (sk->sk_protocol == IPPROTO_TCP) { |
| 167 | struct tcp_sock *tp = tcp_sk(sk); | 167 | struct tcp_sock *tp = tcp_sk(sk); |
| 168 | 168 | ||
| @@ -192,9 +192,11 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
| 192 | kfree_skb(pktopt); | 192 | kfree_skb(pktopt); |
| 193 | 193 | ||
| 194 | sk->sk_destruct = inet_sock_destruct; | 194 | sk->sk_destruct = inet_sock_destruct; |
| 195 | #ifdef INET_REFCNT_DEBUG | 195 | /* |
| 196 | atomic_dec(&inet6_sock_nr); | 196 | * ... and add it to the refcnt debug socks count |
| 197 | #endif | 197 | * in the new family. -acme |
| 198 | */ | ||
| 199 | sk_refcnt_debug_inc(sk); | ||
| 198 | module_put(THIS_MODULE); | 200 | module_put(THIS_MODULE); |
| 199 | retv = 0; | 201 | retv = 0; |
| 200 | break; | 202 | break; |
| @@ -437,7 +439,6 @@ done: | |||
| 437 | } | 439 | } |
| 438 | case MCAST_MSFILTER: | 440 | case MCAST_MSFILTER: |
| 439 | { | 441 | { |
| 440 | extern int sysctl_optmem_max; | ||
| 441 | extern int sysctl_mld_max_msf; | 442 | extern int sysctl_mld_max_msf; |
| 442 | struct group_filter *gsf; | 443 | struct group_filter *gsf; |
| 443 | 444 | ||
