Fix sock_exceed_buf_limit not being triggered in __sk_mem_raise_allocated
[ Upstream commit 8542d6fac25c03b4bf36b2d762cfe60fda8491bb ] When a process under memory pressure is not part of any cgroup and the charged flag is false, trace_sock_exceed_buf_limit was not called as expected. This regression was introduced by commit2def8ff3fd("sock: Code cleanup on __sk_mem_raise_allocated()"). The fix changes the default value of charged to true while preserving existing logic. Fixes:2def8ff3fd("sock: Code cleanup on __sk_mem_raise_allocated()") Signed-off-by: Abel Wu <wuyun.abel@bytedance.com> Signed-off-by: Tengteng Yang <yangtengteng@bytedance.com> Link: https://patch.msgid.link/20250527030419.67693-1-yangtengteng@bytedance.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
35f116a465
commit
90891eadb8
+4
-4
@@ -3157,16 +3157,16 @@ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
|
|||||||
{
|
{
|
||||||
struct mem_cgroup *memcg = mem_cgroup_sockets_enabled ? sk->sk_memcg : NULL;
|
struct mem_cgroup *memcg = mem_cgroup_sockets_enabled ? sk->sk_memcg : NULL;
|
||||||
struct proto *prot = sk->sk_prot;
|
struct proto *prot = sk->sk_prot;
|
||||||
bool charged = false;
|
bool charged = true;
|
||||||
long allocated;
|
long allocated;
|
||||||
|
|
||||||
sk_memory_allocated_add(sk, amt);
|
sk_memory_allocated_add(sk, amt);
|
||||||
allocated = sk_memory_allocated(sk);
|
allocated = sk_memory_allocated(sk);
|
||||||
|
|
||||||
if (memcg) {
|
if (memcg) {
|
||||||
if (!mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge()))
|
charged = mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge());
|
||||||
|
if (!charged)
|
||||||
goto suppress_allocation;
|
goto suppress_allocation;
|
||||||
charged = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Under limit. */
|
/* Under limit. */
|
||||||
@@ -3251,7 +3251,7 @@ suppress_allocation:
|
|||||||
|
|
||||||
sk_memory_allocated_sub(sk, amt);
|
sk_memory_allocated_sub(sk, amt);
|
||||||
|
|
||||||
if (charged)
|
if (memcg && charged)
|
||||||
mem_cgroup_uncharge_skmem(memcg, amt);
|
mem_cgroup_uncharge_skmem(memcg, amt);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user