diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-09-30 10:44:27 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-09-30 10:44:27 +0200 |
commit | 536e0e81e0b04305ce40f6cc4299d29dc9bbc673 (patch) | |
tree | 1cb7f695bc220bb9cdc5cb9ed1ef005f7771b1fd /include/net/sock.h | |
parent | c1fad9ef7ed14aad464972e6444e7a3bd5670f26 (diff) | |
parent | 53061afee43bc5041b67a45b6d793e7afdcf9ca7 (diff) | |
download | lwn-536e0e81e0b04305ce40f6cc4299d29dc9bbc673.tar.gz lwn-536e0e81e0b04305ce40f6cc4299d29dc9bbc673.zip |
Merge branch 'linus' into sched/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index ff5be7e8ddea..8741988e6880 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1332,6 +1332,16 @@ static inline void sk_mem_uncharge(struct sock *sk, int size) if (!sk_has_account(sk)) return; sk->sk_forward_alloc += size; + + /* Avoid a possible overflow. + * TCP send queues can make this happen, if sk_mem_reclaim() + * is not called and more than 2 GBytes are released at once. + * + * If we reach 2 MBytes, reclaim 1 MBytes right now, there is + * no need to hold that much forward allocation anyway. + */ + if (unlikely(sk->sk_forward_alloc >= 1 << 21)) + __sk_mem_reclaim(sk, 1 << 20); } static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb) |