• Ilpo Järvinen's avatar
    tcp: fix loop in ofo handling code and reduce its complexity · 2df9001e
    Ilpo Järvinen authored
    Somewhat luckily, I was looking into these parts with very fine
    comb because I've made somewhat similar changes on the same
    area (conflicts that arose weren't that lucky though). The loop
    was very much overengineered recently in commit 91521944
    (tcp: Use SKB queue and list helpers instead of doing it
    by-hand), while it basically just wants to know if there are
    skbs after 'skb'.
    
    Also it got broken because skb1 = skb->next got translated into
    skb1 = skb1->next (though abstracted) improperly. Note that
    'skb1' is pointing to previous sk_buff than skb or NULL if at
    head. Two things went wrong:
    - We'll kfree 'skb' on the first iteration instead of the
      skbuff following 'skb' (it would require required SACK reneging
      to recover I think).
    - The list head case where 'skb1' is NULL is checked too early
      and the loop won't execute whereas it previously did.
    
    Conclusion, mostly revert the recent changes which makes the
    cset very messy looking but using proper accessor in the
    previous-like version.
    
    The effective changes against the original can be viewed with:
      git-diff 91521944^ \
    		net/ipv4/tcp_input.c | sed -n -e '57,70 p'
    Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2df9001e
tcp_input.c 165 KB