diff options
author | Paolo Abeni <pabeni@redhat.com> | 2020-12-16 14:48:35 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2020-12-17 21:24:47 +0300 |
commit | 13e1603739e58e94e7a3c24191fa2dcd1a8a5df3 (patch) | |
tree | a9b0f58d59f988a5b21653f7cc648fd99043251b /net | |
parent | 219d04992b689e0498ece02d2a451f2b6e2563a9 (diff) | |
download | linux-13e1603739e58e94e7a3c24191fa2dcd1a8a5df3.tar.xz |
mptcp: fix pending data accounting
When sendmsg() needs to wait for memory, the pending data
is not updated. That causes a drift in forward memory allocation,
leading to stall and/or warnings at socket close time.
This change addresses the above issue moving the pending data
counter update inside the sendmsg() main loop.
Fixes: 6e628cd3a8f7 ("mptcp: use mptcp release_cb for delayed tasks")
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/mptcp/protocol.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index b53a91801a6c..09b19aa2f205 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1658,6 +1658,7 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) frag_truesize += psize; pfrag->offset += frag_truesize; WRITE_ONCE(msk->write_seq, msk->write_seq + psize); + msk->tx_pending_data += psize; /* charge data on mptcp pending queue to the msk socket * Note: we charge such data both to sk and ssk @@ -1683,10 +1684,8 @@ wait_for_memory: goto out; } - if (copied) { - msk->tx_pending_data += copied; + if (copied) mptcp_push_pending(sk, msg->msg_flags); - } out: release_sock(sk); |