[NET]: Cleanup INET_REFCNT_DEBUG code
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
d13964f449
commit
e6848976b7
@@ -86,26 +86,12 @@ extern void if6_proc_exit(void);
|
||||
|
||||
int sysctl_ipv6_bindv6only;
|
||||
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_t inet6_sock_nr;
|
||||
EXPORT_SYMBOL(inet6_sock_nr);
|
||||
#endif
|
||||
|
||||
/* The inetsw table contains everything that inet_create needs to
|
||||
* build a new socket.
|
||||
*/
|
||||
static struct list_head inetsw6[SOCK_MAX];
|
||||
static DEFINE_SPINLOCK(inetsw6_lock);
|
||||
|
||||
static void inet6_sock_destruct(struct sock *sk)
|
||||
{
|
||||
inet_sock_destruct(sk);
|
||||
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_dec(&inet6_sock_nr);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
|
||||
{
|
||||
const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo);
|
||||
@@ -186,7 +172,7 @@ static int inet6_create(struct socket *sock, int protocol)
|
||||
inet->hdrincl = 1;
|
||||
}
|
||||
|
||||
sk->sk_destruct = inet6_sock_destruct;
|
||||
sk->sk_destruct = inet_sock_destruct;
|
||||
sk->sk_family = PF_INET6;
|
||||
sk->sk_protocol = protocol;
|
||||
|
||||
@@ -213,12 +199,17 @@ static int inet6_create(struct socket *sock, int protocol)
|
||||
inet->pmtudisc = IP_PMTUDISC_DONT;
|
||||
else
|
||||
inet->pmtudisc = IP_PMTUDISC_WANT;
|
||||
/*
|
||||
* Increment only the relevant sk_prot->socks debug field, this changes
|
||||
* the previous behaviour of incrementing both the equivalent to
|
||||
* answer->prot->socks (inet6_sock_nr) and inet_sock_nr.
|
||||
*
|
||||
* This allows better debug granularity as we'll know exactly how many
|
||||
* UDPv6, TCPv6, etc socks were allocated, not the sum of all IPv6
|
||||
* transport protocol socks. -acme
|
||||
*/
|
||||
sk_refcnt_debug_inc(sk);
|
||||
|
||||
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_inc(&inet6_sock_nr);
|
||||
atomic_inc(&inet_sock_nr);
|
||||
#endif
|
||||
if (inet->num) {
|
||||
/* It assumes that any protocol which allows
|
||||
* the user to assign a number at socket
|
||||
|
@@ -163,6 +163,13 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
fl6_free_socklist(sk);
|
||||
ipv6_sock_mc_close(sk);
|
||||
|
||||
/*
|
||||
* Sock is moving from IPv6 to IPv4 (sk_prot), so
|
||||
* remove it from the refcnt debug socks count in the
|
||||
* original family...
|
||||
*/
|
||||
sk_refcnt_debug_dec(sk);
|
||||
|
||||
if (sk->sk_protocol == IPPROTO_TCP) {
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
@@ -192,9 +199,11 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
kfree_skb(pktopt);
|
||||
|
||||
sk->sk_destruct = inet_sock_destruct;
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_dec(&inet6_sock_nr);
|
||||
#endif
|
||||
/*
|
||||
* ... and add it to the refcnt debug socks count
|
||||
* in the new family. -acme
|
||||
*/
|
||||
sk_refcnt_debug_inc(sk);
|
||||
module_put(THIS_MODULE);
|
||||
retv = 0;
|
||||
break;
|
||||
|
@@ -1407,12 +1407,11 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||
newnp->mcast_oif = tcp_v6_iif(skb);
|
||||
newnp->mcast_hops = skb->nh.ipv6h->hop_limit;
|
||||
|
||||
/* Charge newly allocated IPv6 socket. Though it is mapped,
|
||||
* it is IPv6 yet.
|
||||
/*
|
||||
* No need to charge this sock to the relevant IPv6 refcnt debug socks count
|
||||
* here, tcp_create_openreq_child now does this for us, see the comment in
|
||||
* that function for the gory details. -acme
|
||||
*/
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_inc(&inet6_sock_nr);
|
||||
#endif
|
||||
|
||||
/* It is tricky place. Until this moment IPv4 tcp
|
||||
worked with IPv6 af_tcp.af_specific.
|
||||
@@ -1467,10 +1466,11 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||
if (newsk == NULL)
|
||||
goto out;
|
||||
|
||||
/* Charge newly allocated IPv6 socket */
|
||||
#ifdef INET_REFCNT_DEBUG
|
||||
atomic_inc(&inet6_sock_nr);
|
||||
#endif
|
||||
/*
|
||||
* No need to charge this sock to the relevant IPv6 refcnt debug socks
|
||||
* count here, tcp_create_openreq_child now does this for us, see the
|
||||
* comment in that function for the gory details. -acme
|
||||
*/
|
||||
|
||||
ip6_dst_store(newsk, dst, NULL);
|
||||
newsk->sk_route_caps = dst->dev->features &
|
||||
|
Reference in New Issue
Block a user