Commit 72f96132 authored by Paolo Abeni's avatar Paolo Abeni Committed by David S. Miller

mptcp: try harder to borrow memory from subflow under pressure

If the host is under sever memory pressure, and RX forward
memory allocation for the msk fails, we try to borrow the
required memory from the ingress subflow.

The current attempt is a bit flaky: if skb->truesize is less
than SK_MEM_QUANTUM, the ssk will not release any memory, and
the next schedule will fail again.

Instead, directly move the required amount of pages from the
ssk to the msk, if available

Fixes: 9c3f94e1 ("mptcp: add missing memory scheduling in the rx path")
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 22488e45
...@@ -280,11 +280,13 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, ...@@ -280,11 +280,13 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
/* try to fetch required memory from subflow */ /* try to fetch required memory from subflow */
if (!sk_rmem_schedule(sk, skb, skb->truesize)) { if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
if (ssk->sk_forward_alloc < skb->truesize) int amount = sk_mem_pages(skb->truesize) << SK_MEM_QUANTUM_SHIFT;
goto drop;
__sk_mem_reclaim(ssk, skb->truesize); if (ssk->sk_forward_alloc < amount)
if (!sk_rmem_schedule(sk, skb, skb->truesize))
goto drop; goto drop;
ssk->sk_forward_alloc -= amount;
sk->sk_forward_alloc += amount;
} }
/* the skb map_seq accounts for the skb offset: /* the skb map_seq accounts for the skb offset:
......
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