Message ID | 1473456165.18970.66.camel@edumazet-glaptop3.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Fri, 09 Sep 2016 14:22:45 -0700 > From: Eric Dumazet <edumazet@google.com> > > Willem noticed that we could avoid an rbtree lookup if the > the attempt to coalesce incoming skb to the last skb failed > for some reason. > > Since most ooo additions are at the tail, this is definitely > worth adding a test and fast path. > > Suggested-by: Willem de Bruijn <willemb@google.com> > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied, thanks.
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index a5934c4c8cd4..2e26f3eb0293 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4461,6 +4461,12 @@ coalesce_done: skb = NULL; goto add_sack; } + /* Can avoid an rbtree lookup if we are adding skb after ooo_last_skb */ + if (!before(seq, TCP_SKB_CB(tp->ooo_last_skb)->end_seq)) { + parent = &tp->ooo_last_skb->rbnode; + p = &parent->rb_right; + goto insert; + } /* Find place to insert this segment. Handle overlaps on the way. */ parent = NULL; @@ -4503,7 +4509,7 @@ coalesce_done: } p = &parent->rb_right; } - +insert: /* Insert segment into RB tree. */ rb_link_node(&skb->rbnode, parent, p); rb_insert_color(&skb->rbnode, &tp->out_of_order_queue);