diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 9801cb077293..a25dcdf748ca 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1257,7 +1257,12 @@ alloc_skb: if (copy == 0) { u64 snd_una = READ_ONCE(msk->snd_una); - if (snd_una != msk->snd_nxt || tcp_write_queue_tail(ssk)) { + /* No need for zero probe if there are any data pending + * either at the msk or ssk level; skb is the current write + * queue tail and can be empty at this point. + */ + if (snd_una != msk->snd_nxt || skb->len || + skb != tcp_send_head(ssk)) { tcp_remove_empty_skb(ssk); return 0; }