Commit 8542d6fa authored by Tengteng Yang's avatar Tengteng Yang Committed by Jakub Kicinski
Browse files

Fix sock_exceed_buf_limit not being triggered in __sk_mem_raise_allocated



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 commit 2def8ff3 ("sock:
Code cleanup on __sk_mem_raise_allocated()"). The fix changes the
default value of charged to true while preserving existing logic.

Fixes: 2def8ff3 ("sock: Code cleanup on __sk_mem_raise_allocated()")
Signed-off-by: default avatarAbel Wu <wuyun.abel@bytedance.com>
Signed-off-by: default avatarTengteng Yang <yangtengteng@bytedance.com>
Link: https://patch.msgid.link/20250527030419.67693-1-yangtengteng@bytedance.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 90b83efa
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -3284,16 +3284,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 proto *prot = sk->sk_prot;
	bool charged = false;
	bool charged = true;
	long allocated;

	sk_memory_allocated_add(sk, amt);
	allocated = sk_memory_allocated(sk);

	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;
		charged = true;
	}

	/* Under limit. */
@@ -3378,7 +3378,7 @@ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)

	sk_memory_allocated_sub(sk, amt);

	if (charged)
	if (memcg && charged)
		mem_cgroup_uncharge_skmem(memcg, amt);

	return 0;