|
@@ -1179,13 +1179,14 @@ static int tcp_match_skb_to_sack(struct sock *sk, struct sk_buff *skb,
|
|
|
*/
|
|
|
if (pkt_len > mss) {
|
|
|
unsigned int new_len = (pkt_len / mss) * mss;
|
|
|
- if (!in_sack && new_len < pkt_len) {
|
|
|
+ if (!in_sack && new_len < pkt_len)
|
|
|
new_len += mss;
|
|
|
- if (new_len >= skb->len)
|
|
|
- return 0;
|
|
|
- }
|
|
|
pkt_len = new_len;
|
|
|
}
|
|
|
+
|
|
|
+ if (pkt_len >= skb->len && !in_sack)
|
|
|
+ return 0;
|
|
|
+
|
|
|
err = tcp_fragment(sk, skb, pkt_len, mss, GFP_ATOMIC);
|
|
|
if (err < 0)
|
|
|
return err;
|