tcp_memcontrol replicates the global sysctl_mem limit array per
cgroup, but it only ever sets these entries to the value of the
memory_allocated page_counter limit. Use the latter directly.

Signed-off-by: Johannes Weiner <han...@cmpxchg.org>
Reviewed-by: Vladimir Davydov <vdavy...@virtuozzo.com>
Acked-by: David S. Miller <da...@davemloft.net>
---
 include/linux/memcontrol.h | 1 -
 include/net/sock.h         | 8 +++++---
 net/ipv4/tcp_memcontrol.c  | 8 --------
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 1df8e89..be72aea 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -89,7 +89,6 @@ struct cg_proto {
        struct page_counter     memory_allocated;       /* Current allocated 
memory. */
        int                     memory_pressure;
        bool                    active;
-       long                    sysctl_mem[3];
        /*
         * memcg field is used to find which memcg we belong directly
         * Each memcg struct can hold more than one cg_proto, so container_of
diff --git a/include/net/sock.h b/include/net/sock.h
index 7afbdab..0b333c2 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1159,10 +1159,12 @@ static inline void sk_enter_memory_pressure(struct sock 
*sk)
 
 static inline long sk_prot_mem_limits(const struct sock *sk, int index)
 {
-       long *prot = sk->sk_prot->sysctl_mem;
+       long limit = sk->sk_prot->sysctl_mem[index];
+
        if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
-               prot = sk->sk_cgrp->sysctl_mem;
-       return prot[index];
+               limit = min_t(long, limit, sk->sk_cgrp->memory_allocated.limit);
+
+       return limit;
 }
 
 static inline void memcg_memory_allocated_add(struct cg_proto *prot,
diff --git a/net/ipv4/tcp_memcontrol.c b/net/ipv4/tcp_memcontrol.c
index 6759e0d..ef4268d 100644
--- a/net/ipv4/tcp_memcontrol.c
+++ b/net/ipv4/tcp_memcontrol.c
@@ -21,9 +21,6 @@ int tcp_init_cgroup(struct mem_cgroup *memcg, struct 
cgroup_subsys *ss)
        if (!cg_proto)
                return 0;
 
-       cg_proto->sysctl_mem[0] = sysctl_tcp_mem[0];
-       cg_proto->sysctl_mem[1] = sysctl_tcp_mem[1];
-       cg_proto->sysctl_mem[2] = sysctl_tcp_mem[2];
        cg_proto->memory_pressure = 0;
        cg_proto->memcg = memcg;
 
@@ -54,7 +51,6 @@ EXPORT_SYMBOL(tcp_destroy_cgroup);
 static int tcp_update_limit(struct mem_cgroup *memcg, unsigned long nr_pages)
 {
        struct cg_proto *cg_proto;
-       int i;
        int ret;
 
        cg_proto = tcp_prot.proto_cgroup(memcg);
@@ -65,10 +61,6 @@ static int tcp_update_limit(struct mem_cgroup *memcg, 
unsigned long nr_pages)
        if (ret)
                return ret;
 
-       for (i = 0; i < 3; i++)
-               cg_proto->sysctl_mem[i] = min_t(long, nr_pages,
-                                               sysctl_tcp_mem[i]);
-
        if (!cg_proto->active) {
                /*
                 * The active flag needs to be written after the static_key
-- 
2.6.3

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to