This is a note to let you know that I've just added the patch titled

    tcp: don't fragment SACKed skbs in tcp_mark_head_lost()

to the 3.2-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     tcp-don-t-fragment-sacked-skbs-in-tcp_mark_head_lost.patch
and it can be found in the queue-3.2 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 197dd635524b96cc1c5bff549a27496dae3613e5 Mon Sep 17 00:00:00 2001
From: Neal Cardwell <[email protected]>
Date: Fri, 2 Mar 2012 21:36:51 +0000
Subject: tcp: don't fragment SACKed skbs in tcp_mark_head_lost()


From: Neal Cardwell <[email protected]>

[ Upstream commit c0638c247f559e1a16ee79e54df14bca2cb679ea ]

In tcp_mark_head_lost() we should not attempt to fragment a SACKed skb
to mark the first portion as lost. This is for two primary reasons:

(1) tcp_shifted_skb() coalesces adjacent regions of SACKed skbs. When
doing this, it preserves the sum of their packet counts in order to
reflect the real-world dynamics on the wire. But given that skbs can
have remainders that do not align to MSS boundaries, this packet count
preservation means that for SACKed skbs there is not necessarily a
direct linear relationship between tcp_skb_pcount(skb) and
skb->len. Thus tcp_mark_head_lost()'s previous attempts to fragment
off and mark as lost a prefix of length (packets - oldcnt)*mss from
SACKed skbs were leading to occasional failures of the WARN_ON(len >
skb->len) in tcp_fragment() (which used to be a BUG_ON(); see the
recent "crash in tcp_fragment" thread on netdev).

(2) there is no real point in fragmenting off part of a SACKed skb and
calling tcp_skb_mark_lost() on it, since tcp_skb_mark_lost() is a NOP
for SACKed skbs.

Signed-off-by: Neal Cardwell <[email protected]>
Acked-by: Ilpo Järvinen <[email protected]>
Acked-by: Yuchung Cheng <[email protected]>
Acked-by: Nandita Dukkipati <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 net/ipv4/tcp_input.c |    1 +
 1 file changed, 1 insertion(+)

--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2571,6 +2571,7 @@ static void tcp_mark_head_lost(struct so
 
                if (cnt > packets) {
                        if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) ||
+                           (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) ||
                            (oldcnt >= packets))
                                break;
 


Patches currently in stable-queue which might be from [email protected] are

queue-3.2/tcp-fix-tcp_shift_skb_data-to-not-shift-sacked-data-below-snd_una.patch
queue-3.2/tcp-don-t-fragment-sacked-skbs-in-tcp_mark_head_lost.patch
queue-3.2/tcp-fix-false-reordering-signal-in-tcp_shifted_skb.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to