mm: memcontrol: consolidate cgroup socket tracking
[cascardo/linux.git] / net / core / sock.c
index fd7b41e..c73e28f 100644 (file)
@@ -1315,24 +1315,6 @@ static void sock_copy(struct sock *nsk, const struct sock *osk)
 #endif
 }
 
-void sk_prot_clear_portaddr_nulls(struct sock *sk, int size)
-{
-       unsigned long nulls1, nulls2;
-
-       nulls1 = offsetof(struct sock, __sk_common.skc_node.next);
-       nulls2 = offsetof(struct sock, __sk_common.skc_portaddr_node.next);
-       if (nulls1 > nulls2)
-               swap(nulls1, nulls2);
-
-       if (nulls1 != 0)
-               memset((char *)sk, 0, nulls1);
-       memset((char *)sk + nulls1 + sizeof(void *), 0,
-              nulls2 - nulls1 - sizeof(void *));
-       memset((char *)sk + nulls2 + sizeof(void *), 0,
-              size - nulls2 - sizeof(void *));
-}
-EXPORT_SYMBOL(sk_prot_clear_portaddr_nulls);
-
 static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
                int family)
 {
@@ -1344,12 +1326,8 @@ static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
                sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
                if (!sk)
                        return sk;
-               if (priority & __GFP_ZERO) {
-                       if (prot->clear_sk)
-                               prot->clear_sk(sk, prot->obj_size);
-                       else
-                               sk_prot_clear_nulls(sk, prot->obj_size);
-               }
+               if (priority & __GFP_ZERO)
+                       sk_prot_clear_nulls(sk, prot->obj_size);
        } else
                sk = kmalloc(prot->obj_size, priority);
 
@@ -1385,6 +1363,7 @@ static void sk_prot_free(struct proto *prot, struct sock *sk)
        slab = prot->slab;
 
        cgroup_sk_free(&sk->sk_cgrp_data);
+       mem_cgroup_sk_free(sk);
        security_sk_free(sk);
        if (slab != NULL)
                kmem_cache_free(slab, sk);
@@ -1421,6 +1400,7 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
                sock_net_set(sk, net);
                atomic_set(&sk->sk_wmem_alloc, 1);
 
+               mem_cgroup_sk_alloc(sk);
                cgroup_sk_alloc(&sk->sk_cgrp_data);
                sock_update_classid(&sk->sk_cgrp_data);
                sock_update_netprioidx(&sk->sk_cgrp_data);
@@ -1567,6 +1547,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
                newsk->sk_incoming_cpu = raw_smp_processor_id();
                atomic64_set(&newsk->sk_cookie, 0);
 
+               mem_cgroup_sk_alloc(newsk);
                cgroup_sk_alloc(&newsk->sk_cgrp_data);
 
                /*
@@ -1591,9 +1572,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
                sk_set_socket(newsk, NULL);
                newsk->sk_wq = NULL;
 
-               if (mem_cgroup_sockets_enabled && sk->sk_memcg)
-                       sock_update_memcg(newsk);
-
                if (newsk->sk_prot->sockets_allocated)
                        sk_sockets_allocated_inc(newsk);