Commit 931f3f4b authored by Johannes Weiner's avatar Johannes Weiner Committed by Linus Torvalds

net: tcp_memcontrol: remove bogus hierarchy pressure propagation

When a cgroup currently breaches its socket memory limit, it enters
memory pressure mode for itself and its *ancestors*.  This throttles
transmission in unrelated sibling and cousin subtrees that have nothing
to do with the breached limit.

On the contrary, breaching a limit should make that group and its
*children* enter memory pressure mode.  But this happens already, albeit
lazily: if an ancestor limit is breached, siblings will enter memory
pressure on their own once the next packet arrives for them.

So no additional hierarchy code is needed.  Remove the bogus stuff.
Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Reviewed-by: default avatarVladimir Davydov <vdavydov@virtuozzo.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8c2c2358
...@@ -1155,14 +1155,8 @@ static inline void sk_leave_memory_pressure(struct sock *sk) ...@@ -1155,14 +1155,8 @@ static inline void sk_leave_memory_pressure(struct sock *sk)
if (*memory_pressure) if (*memory_pressure)
*memory_pressure = 0; *memory_pressure = 0;
if (mem_cgroup_sockets_enabled && sk->sk_cgrp) { if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
struct cg_proto *cg_proto = sk->sk_cgrp; sk->sk_cgrp->memory_pressure = 0;
struct proto *prot = sk->sk_prot;
for (; cg_proto; cg_proto = parent_cg_proto(prot, cg_proto))
cg_proto->memory_pressure = 0;
}
} }
static inline void sk_enter_memory_pressure(struct sock *sk) static inline void sk_enter_memory_pressure(struct sock *sk)
...@@ -1170,13 +1164,8 @@ static inline void sk_enter_memory_pressure(struct sock *sk) ...@@ -1170,13 +1164,8 @@ static inline void sk_enter_memory_pressure(struct sock *sk)
if (!sk->sk_prot->enter_memory_pressure) if (!sk->sk_prot->enter_memory_pressure)
return; return;
if (mem_cgroup_sockets_enabled && sk->sk_cgrp) { if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
struct cg_proto *cg_proto = sk->sk_cgrp; sk->sk_cgrp->memory_pressure = 1;
struct proto *prot = sk->sk_prot;
for (; cg_proto; cg_proto = parent_cg_proto(prot, cg_proto))
cg_proto->memory_pressure = 1;
}
sk->sk_prot->enter_memory_pressure(sk); sk->sk_prot->enter_memory_pressure(sk);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment