net: relax rcvbuf limits
skb->truesize might be big even for a small packet.
Its even bigger after commit 87fb4b7b53
(net: more accurate skb
truesize) and big MTU.
We should allow queueing at least one packet per receiver, even with a
low RCVBUF setting.
Reported-by: Michal Simek <monstr@monstr.eu>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
a0a129f8b6
commit
0fd7bac6b6
@@ -637,12 +637,14 @@ static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
/*
|
||||
* Take into account size of receive queue and backlog queue
|
||||
* Do not take into account this skb truesize,
|
||||
* to allow even a single big packet to come.
|
||||
*/
|
||||
static inline bool sk_rcvqueues_full(const struct sock *sk, const struct sk_buff *skb)
|
||||
{
|
||||
unsigned int qsize = sk->sk_backlog.len + atomic_read(&sk->sk_rmem_alloc);
|
||||
|
||||
return qsize + skb->truesize > sk->sk_rcvbuf;
|
||||
return qsize > sk->sk_rcvbuf;
|
||||
}
|
||||
|
||||
/* The per-socket spinlock must be held here. */
|
||||
|
Reference in New Issue
Block a user