Skip to content
  • Ilpo Järvinen's avatar
    [TCP]: Force TSO splits to MSS boundaries · 0e3a4803
    Ilpo Järvinen authored
    
    
    If snd_wnd - snd_nxt wasn't multiple of MSS, skb was split on
    odd boundary by the callers of tcp_window_allows.
    
    We try really hard to avoid unnecessary modulos. Therefore the
    old caller side check "if (skb->len < limit)" was too wide as
    well because limit is not bound in any way to skb->len and can
    cause spurious testing for trimming in the middle of the queue
    while we only wanted that to happen at the tail of the queue.
    A simple additional caller side check for tcp_write_queue_tail
    would likely have resulted 2 x modulos because the limit would
    have to be first calculated from window, however, doing that
    unnecessary modulo is not mandatory. After a minor change to
    the algorithm, simply determine first if the modulo is needed
    at all and at that point immediately decide also from which
    value it should be calculated from.
    
    This approach also kills some duplicated code.
    
    Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0e3a4803